函数nl2br中的PHP奇怪行为

时间:2010-07-04 08:42:39

标签: php function behavior

我正在处理我的小型网络应用程序的重构。整晚。今天当我开始测试时,我发现的第一个错误是系统PHP函数nl2br()的问题。

在我的本地主机上,我有PHP版本 5.2.9 ,正如我在PHP site上看到的版本 4.0.5 nl2br()符合XHTML

然后我绝对不明白为什么我的nl2br()在没有第二个参数的情况下将<br>设置为false而不是<br />

这是我发现此错误的方法:

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;
}

1 个答案:

答案 0 :(得分: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()将在所有版本中正常工作。