2010-07-04 98 views
3

我正在處理我的小型web應用程序的重構。整夜。今天當我開始測試時,我發現第一個bug是系統PHP函數nl2br()的問題。功能nl2br PHP奇怪的行爲

在我的本地我有PHP版本5.2.9 我對PHP site看到版本4.0.5nl2br()XHTML標準。

然後,我絕對不明白爲什麼我的nl2br()返回<br>沒有第二個參數設置爲false而不是<br />

這裏是我的方法,我發現這個bug:

public function eliminateTags($msg) { 
    $setBrakes = nl2br($msg); 
    $decodeHTML = htmlspecialchars_decode($setBrakes); 

    # Check PHP version 
    if((int)version_compare(PHP_VERSION, '4.0.5') == 1) { 
     $withoutTags = strip_tags($decodeHTML, '<br />'); 
    } else { 
     $withoutTags = strip_tags($decodeHTML, '<br>'); 
    } 

    return $withoutTags; 
} 
+2

我不能說我可以用最新的PHP 5.2重現這個變化日誌沒有提到這一點。你有一個腳本能夠再現這個問題嗎? – Artefacto 2010-07-04 08:47:39

+1

你如何檢查br標籤? #你使用的是Firebug(或類似的工具)嗎? #您是否在查看由腳本生成的文件? #你在檢查腳本生成的字符串嗎? – Eineki 2010-07-04 08:51:04

+0

默認情況下,它使用'
',使用5.3.2。 – 2010-07-04 08:54:25

回答

4

我不知道我理解你想使用此功能完成的任務。首先,你在每一個新行中插入HTML斷點,然後除去斷點之外的所有標籤。

首先剝離標籤然後插入HTML換行符是不是更明智?

public function eliminateTags($msg) { 
    $decodeHTML = htmlspecialchars_decode($msg); 
    $withoutTags = strip_tags($decodeHTML); 
    $setBreaks = nl2br($withoutTags); 

    return $setBreaks; 
} 

編輯:

顯然你沒有使用正確strip_tags()。您需要詢問PHP要排除的標籤,即<br>,而不是<br />。詢問PHP排除<br />就像是要求排除,例如<p></p>,這是行不通的。

這反過來意味着你不必檢查PHP版本 - strip_tags()將在所有版本中工作。

+0

+1觀察 – Eineki 2010-07-04 09:02:55

+1

不是一個真正的答案,但。 – Artefacto 2010-07-04 09:03:54

+0

奧基,解決了。但是當我嘗試其他方式時可能會出現問題?我想製作一些消除不需要的標籤的方法。例如,如果我寫了'',但是使用這個方法它會返回'alret();'。 – Eugene 2010-07-04 09:11:09