php strip_tags:允许<br/>?

时间:2010-09-25 13:24:39

标签: php tags strip

如何在strip_tags()中允许<br />或以任何方式解决它?

<?php
$text = '<p>Test <br />paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
echo strip_tags($text);
echo "\n";

// Allow <p>, <a>, <br />
echo strip_tags($text, '<p><a><br />');
echo "\n";

// Allow <br /> only
echo strip_tags($text, '<br />');
?>

结果:

Test paragraph. Other text
<p>Test paragraph.</p> <a href="#fragment">Other text</a>
Test paragraph. Other text

谢谢, 刘

4 个答案:

答案 0 :(得分:17)

不要使用自动关闭标签名称? echo strip_tags($text, '<br>');

strip_tags()函数的allowable_tags参数采用<tagname>格式中允许的标记代码无效的原因是因为您使用了<br />而不是{{1} }}

答案 1 :(得分:6)

strip_tags并非旨在作为安全措施,将其与allowable_tags一起使用肯定是不安全的,因为它会通过事件处理程序和其他有害属性。

如果您想允许用户输入一些白名单元素和属性,则需要使用带有正确HTML解析器的HTML清理库。请参阅示例HTML purifier

用户评论通常最好不要让用户完全控制HTML标记,而是接受原始文本,在输出上对其进行HTML转义,并进行替换以从文本生成标记(例如:{{1 }} - &gt; \n<br> - &gt; \n\n,链接检测。)

答案 2 :(得分:2)

标签中也不允许有空格:http://php.net/manual/en/function.strip-tags.php(参见第二个注释)

答案 3 :(得分:1)

雅你可以将一个或多个标签混合在同一时间。

string strip_tags ( string $str [, string $allowable_tags ] )

检查文档

如果您想剥离新线,解决方案将在剥离之前使用 nl2br

所以

echo strip_tags(nl2br($text), '<br>');