0

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

4

3 回答 3

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));
于 2012-07-15T15:48:56.613 回答
0
  1. 用户发布数据
  2. 数据为mysql转义,写入数据库
  3. 用户请求数据
  4. 数据被编码以供显示(积极地使用htmlentitiesorhtmlspecialchars或某些允许的字符子集。您可以使用 来执行此操作str_replace,但有更好的实用程序)。
于 2012-07-15T15:49:44.883 回答
0

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

strip_tags($text, '<p><a>');
于 2012-07-15T15:43:57.880 回答