0

現在のプロジェクト用のテンプレートシステムがあります。str_replace()を使用して、HTMLドキュメント内のトークンを動的データに置き換えます。

たとえば、{%TEAM_NAME%}は、特定の要因に応じてテーブルから取得したチームの名前に置き換えられます。

あるケースでは、トークンの数(または検索パラメーターの文字列の長さ)が非常に長くなり、置き換えられなくなったようです。

これが私が言及しているものを示すためのスニペットです:

$tokens = array('{%T_ID%}','{%NAV_BAR%}','{%TEAM_NAMES%}','{%CLUB_NAME%}','{%TEAM_NAME%}','{%STATE%}', '{%AGE_GROUP%}','{%LEVEL%}','{%CONTACT_NAME%}','{%CONTACT_ADDRESS%}','{%CONTACT_CITY%}','{%CONTACT_ZIP%}','{%CONTACT_EMAIL%}','{%CONTACT_PHONE_NUM%}','{%COACH_NAME%}','{%COACH_EMAIL%}','{%COACH_PHONE_NUM%}','{%SECRET_Q%}','{%SECRET_A%}','{%SO_CAL_ID%}','{%STATE_ID%}','{%NUM_PLAYERS%}','{%NOTES%}','{%SCORE_W%}','{%SCORE_L%}','{%SCORE_T%}','{%SCORE_GF%}','{%SCORE_GA%}','{%SCORE_GD%}','{%SCORE_POINTS%}');

    $replace = array(
        $tId => null,
        $navBar->Parse() => null,
        $teamNameOptions => null,
        _CLUB_NAME_ => _TEAM_TABLE_,
        _TEAM_NAME_ => _TEAM_TABLE_,
        _STATE_ => _TEAM_TABLE_,
        $ageOptions => null,
        $levelOptions => null,
        _CONTACT_NAME_ => _TEAM_TABLE_,
        _CONTACT_ADDRESS_ => _TEAM_TABLE_,
        _CITY_ => _TEAM_TABLE_,
        _ZIP_ => _TEAM_TABLE_,
        _CONTACT_EMAIL_ => _TEAM_TABLE_,
        _CONTACT_PHONE_NUM_ => _TEAM_TABLE_,
        _COACH_NAME_ => _TEAM_TABLE_,
        _COACH_EMAIL_ => _TEAM_TABLE_,
        _COACH_PHONE_NUM_ => _TEAM_TABLE_,
        _SECRET_Q_ => _TEAM_TABLE_,
        _SECRET_A_ => _TEAM_TABLE_,
        _SO_CAL_ID_ => _TEAM_TABLE_,
        _STATE_ID_ => _TEAM_TABLE_,
        _NUM_PLAYERS_ => _TEAM_TABLE_,
        _NOTES_ => _TEAM_TABLE_,
        _SCORE_W_ => _TEAM_TABLE_,
        _SCORE_L_ => _TEAM_TABLE_,
        _SCORE_T_ => _TEAM_TABLE_,
        _SCORE_GF_ => _TEAM_TABLE_,
        _SCORE_GA_ => _TEAM_TABLE_,
        _SCORE_POINTS_ => _TEAM_TABLE_
    );

いくつかの広範なホワイトボックステストを実行すると、値はすべてそこにありますが、最後のトークンと置換{%SCORE_POINTS%}は、本来あるべき数値に置き換えられるのではなく、nullになります。

これ:

<input type="text" name="fScorePoints" value="{%SCORE_POINTS%}">

次のようになります。

<input type="text" name="fScorePoints" value="5">

しかし、実際には次のようになります。

<input type="text" name="fScorePoints" value="">

別のトークンと置換を追加してさらにテストしましたが、それも適切に置換されていないため、何らかの形式の文字制限があると思いますか?

他のすべてのトークンと置換が完全に正常に機能することを確認できますが、この最後のトークンだけではありません。

どうしたの?

洞察をありがとう。

4

3 に答える 3

4

str_replace()のドキュメントから:

検索と置換が配列の場合、 str_replace() は各配列から値を取得し、それらを使用してサブジェクトの検索と置換を行います。replace の値が search よりも少ない場合、残りの置換値には空の文字列が使用されます。

コメンターが指摘したように、被験者よりも 1 少ない交換価値があります。

于 2012-08-09T20:09:51.063 に答える
2

あなたの質問には他の人が答えていますが、あなたがしていることをよりスケーラブルに行う方法があることを指摘します。コールバック関数を使用すると、構文のすべてを置き換えることができます

{%VARIABLE_NAME%}

配列の項目を使用 $array['VARIABLE_NAME'];

コピーすることもできましたが、しばらくの間、自分の Web サイトに機能がありました。

http://www.bumcheekcity.com/pages/112-php-code

このような文字列を置き換えたいという問題を抱えているあなたや他の人々に役立つはずです。

于 2012-08-09T20:15:21.097 に答える
1

置換に「{%SCORE_GD%}」がありませんでした。これが問題の原因ですか?

編集 投稿する前にページを更新するのを忘れているようです。私はこれに遅れました!

于 2012-08-09T20:20:50.690 に答える