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

psa*_*rid 5 html php xss html-entities

我试图在页面上显示评论,但我遇到了一些麻烦.

我试图处理基本上有两种不同类型的评论:

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

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

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

谢谢,菲尔

tra*_*lix 11

如果您想删除不需要的标签,可以尝试strip_tags.它支持,allowable_tags因此您可以指定任何不想被剥离的标记.手册中的示例:

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

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


mel*_*okb 3

一种方法:<br>用占位符替换,例如\n. 然后做htmlentities来清理html代码。最后,替换\nback<br>来恢复换行符。