2012-08-09 89 views
1

我有一個當前項目的模板系統。我使用str_replace()用動態數據替換HTML文檔中的標記。str_replace()有搜索限制嗎?

例如,{%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%}不被替換爲一個數字應該是,而不是空的。

此:

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

應該改爲:

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

但實際上就變成了:

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

我加入另一個標記和更換,並且也進一步測試不正確更換,導致我認爲有某種形式的字符限制?

我可以確認所有其他標記和替換工作完全正常,只是不是最後一個。

發生了什麼事?

感謝您的任何見解。

+5

你有30個代幣,只有29個代替。這就是爲什麼最後一直是空白的原因。 – Jeremy 2012-08-09 20:05:17

+0

你說得對,我忘了更新{%SCORE_GD%}的刪除謝謝。 – Lee 2012-08-09 20:06:57

+1

如果您已解決問題,請將其作爲答案發布並接受。 – 2012-08-09 20:11:38

回答

3

documentation for str_replace()

如果搜索和替換是數組,則str_replace()函數從每個陣列取值 並使用它們來搜索和上主體替換。如果 替換的值比搜索更少,則將使用空字符串作爲替換值的其餘部分。

正如評論者所指出的那樣,您的重置價值低於您的主題。

+0

謝謝。一個單詞失明的案例! – Lee 2012-08-09 20:10:41

+0

適合所有人! :) – 2012-08-09 20:10:59

1

雖然你的問題已被其他人回答,但我會指出有一種更可擴展的方式來做你正在做的事情。通過使用一個回調函數,可以替代語法

{%VARIABLE_NAME%} 

萬物有了一個數組$陣列[「VARIABLE_NAME」]的項目;

我可以把它複製出來,但我在我的網站上有一段時間的功能。

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

它應該是用你或其他人與你想更換這樣的字符串的問題。

0

您在替換時錯過了「{%SCORE_GD%}」這是否會導致此問題?

編輯顯然忘記刷新頁面之前發佈是一件壞事,我遲到了這一個!