PHP strip_tags:允许使用 <br /> 标签吗?

9
如何允许在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

感谢您,Lau。
4个回答

18

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

strip_tags()函数的allowable_tags参数以<tagname>形式指定允许的标签。你的代码之所以无效,是因为你使用了<br />而不是<br>


2
我曾经认为有效的br标签总是自闭合的!? - user457015
仅限于XHTML,而不是strip_tags解析的HTML。 - Randy the Dev
只是为了其他想允许多个标签的人,你可以像这样添加它们:strip_tags($text, '<br><p><b>'); - Avatar

6

strip_tags 不是用来作为安全措施的,如果与 allowable_tags 一起使用,肯定是不安全的,因为它会放行事件处理程序和其他有害属性。

如果您想允许用户输入一些白名单元素和属性,您需要使用一个带有适当HTML解析器的HTML净化库。例如,可以查看HTML purifier

通常最好让用户评论中根本不给用户控制HTML标记,而是接受纯文本,在输出时进行HTML转义,并进行替换以从文本生成标记(例如:\n -> <br>, \n\n -> </p><p>, 链接检测)。


2

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接