2011-11-30 124 views
1

我有一個問題,只發生在1特定的Linux服務器。 其中一個CentOS 5.7 Apache 2.2 PHP 5.33服務器在後面僅供參考。PHP preg函數不解析html註釋

我有一個PHP模板類,使用preg_函數從模板文件中的HTML註釋中解析出循環。示例文件:

<!--if place--> 
     {place} 
    <!--else place--> 
     Nothing 
    <!--endif place--> 

這是我使用的命令:

$found = preg_match("/(?i)<!--(if|begin) ([a-zA-Z0-9_.\->!%<>= ]+)-->/u", $template, $aTag, PREG_OFFSET_CAPTURE, $position); 

這應該給我的名字「地方」的一個分支。

在我的本地和所有其他環境中,它正確地解析if分支,只有在這個服務器上它不解析它們,只是讓它們在代碼中,這意味着在我的情況下,它顯示了var {place}和字符串沒有。

就像我說的,它適用於本地Windows - > WampServer機器。它適用於其他Linux機器,也是CENTOS的機器。

看起來這臺機器沒有將HTML註釋標籤識別爲可解析的php腳本。那可能嗎?

在此先感謝。 任何建議,非常感謝。

+0

不承認什麼? – greg0ire

+0

你試過的代碼是什麼? –

+0

你正在使用哪種正則表達式? MB覆蓋活動? – Criss

回答

0

您需要的「S」修飾符添加到您的表達,迫使多匹配模式:

"/(?i)<!--(if|begin) ([a-zA-Z0-9_.\->!%<>= ]+)-->/s" 

,我100%肯定,你不需要用「u」的說法。

+0

試了一下,並沒有幫助 – Tschef

0

對於任何人可能會遇到這也。

這是一個plesk編譯的PHP版本(5.3.3),從2006年開始有一個PCRE庫!編譯進去,基本上忽略瞭解析中的所有HTML標籤!

所以,當你有這個問題,有些東西被解析,有些東西沒有,檢查你的phpinfo PCRE延長日期。