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

标签 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 执行并显示一个警告对话框。

谢谢, 菲尔

最佳答案

如果你想删除不需要的标签,你可以试试 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 转换为换行符后,您不必担心它会被删除。可能不是您想要的,但希望它能提供一个想法。

关于php - 转义除 <br> 之外的所有 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5986837/

相关文章:

php - 2个数组更新mysql查询。 1 个数组包含要更新的值,其他数组包含要更新的唯一 ID

php - 如何使表格列可排序

html - css + 如何让单元格有边框和单元格没有边框

asp.net - 如何防止 Asp.NET 中的 XSS

php - 保护 PHP session 免受 XSS 攻击

php - 存储数据库,同时访问的良好模式

php - 提交插入查询然后重新加载页面

html - 纯 CSS 图像缩略图

drupal - 是否需要清理/转义来自 drupal 的 arg(x) 的输出?

php - 为什么从 Laravel 中的 AppServiceProvider 访问时用户和 session 不起作用?