我有一个用于当前项目的模板系统。我使用 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="">
我通过添加另一个令牌和替换进行了进一步测试,但也没有正确替换,导致我假设存在某种形式的字符限制?
我可以确认所有其他令牌和替换都可以正常工作,只是不是最后一个。
这是怎么回事?
感谢您的任何见解。