在htmlentities上使用str_replace会有什么危害吗?

时间:2012-07-15 15:39:40

标签: php html-entities

我有一个自定义论坛,我使用htmlentities,因此用户无法发布恶意代码(html / js)。无论如何,当我从数据库中提取帖子时,我使用str_replace来显示某些html元素<,>,&等等。这样做有什么害处吗?它会导致副作用/ html渲染吗?

3 个答案:

答案 0 :(得分:0)

使用strip_tags来避免任何html / js / php。 它有一些选项可以允许你想要的任何标签:

strip_tags($text, '<p><a>');

答案 1 :(得分:0)

strip_tags,如文档中所述,不会删除内联javascript或清理,因此这不是一个好主意。一个常见的解决方案是使用bbcode代替许多库,或者您可以创建自己的库,然后使用preg_replace安全地替换您自己的标记。

以下是一个快速示例:

$safe_output = htmlspecialchars($output);
$find = array("'\[b\](.*?)\[/b\]'is");
$replace = array("<strong>\\1</strong>");
$result = preg_replace($find, $replace, nl2br($safe_output));

答案 2 :(得分:0)

  1. 用户发布数据
  2. 为mysql转义数据,写入数据库
  3. 用户提出数据请求
  4. 对数据进行编码以进行显示(积极地使用htmlentitieshtmlspecialchars或允许字符的某些子集。您可以使用str_replace执行此操作,但有更好的实用程序。)