转义除了<br/>之外的所有HTML

时间:2011-05-13 03:02:46

标签: php html xss html-entities

我正在尝试在网页上显示评论,但我遇到了一些麻烦。

我正在努力处理两种不同类型的评论:

(1)XSS类型..例如<script type="text/javascript">alert('hi')</script>。这可以通过在进入数据库之前转义它然后在其上运行stripslashes和htmlentities来相当容易地处理。

(2)<br>的评论打破了。当数据存储到数据库中时,我正在运行nl2br,因此数据看起来像hi<br>hello<br><br>etc。但是,当我显示此评论时,<br>不会像我希望的那样变成分页符。

知道该怎么办?我应该注意,关闭htmlentities修复了第二种类型,但第一种类型然后作为纯html执行并显示警告对话框。

谢谢, 菲尔

2 个答案:

答案 0 :(得分:11)

如果您要删除不需要的代码,可以尝试strip_tags。它支持allowable_tags,因此您可以指定任何不想被剥离的标记。来自manual的示例:

// Allow <p> and <a>
// you can add <br> if you want it not stripped
echo strip_tags($text, '<p><a>');

因此,在将所有\n转换为换行符后,您不必担心它会被剥离。可能不是你想要的,但希望它能给出一个想法。

答案 1 :(得分:2)

一种方法:将<br>替换为占位符,例如\n。然后做htmlentities来清理HTML代码。最后,将\n替换回<br>以恢复换行符。