2010-07-04 74 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