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']; 的项目

我可以把它复制出来,但我的网站上的功能已经有一段时间了。

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

它应该对您或其他有您想要替换这样的字符串的问题的人有用。

于 2012-08-09T20:15:21.097 回答
1

您在替换中缺少“{%SCORE_GD%}”是导致问题的原因吗?

编辑 显然忘记在发布之前刷新页面是一件坏事,我迟到了!

于 2012-08-09T20:20:50.690 回答