在使用HTML_entity_decode解码HTML之后;无法正常显示


After decoding HTML using html_entity_decode it doesn't display properly

我在解码和显示一些HTML时遇到问题。

我发布来自名为TinyMCE的所见即所得文本编辑器的数据,并使用以下代码(不包括无关代码)将其存储到数据库中

$text = $_POST['bbcode_field']; // from textarea
if(get_magic_quotes_gpc()){
     $text = stripslashes($text);
     //strip off the slashes if they are magically added.
}
$text = htmlentities($text);

然后,我使用以下将数据输入数据库

Report ='".htmlspecialchars(mysql_real_escape_string($text), ENT_QUOTES)."',

这很好,它可以很好地插入数据库。当我尝试从数据库中检索数据并使用进行解码时

'.html_entity_decode($row['Content']).'

和回显,它回显,但包括HTML格式,如<p>标签等。

我需要显示在HTML页面上,但使用HTML标记的格式。

我哪里错了?

谢谢。

删除此:

$text = htmlentities($text);

这里标记的部分:

Report ='".htmlspecialchars(mysql_real_escape_string($text), ENT_QUOTES)."',
           ^^^^^^^^^^^^^^^^^                               ^^^^^^^^^^^^^

这个:

html_entity_decode($row['Content'])

问题是,您对HTML实体进行了两次编码,但只对其进行了一次解码。这意味着它们最终被编码一次,当然不会被解释为HTML(这就是编码它们的意义所在)。事实上,您根本不需要或不想对它们进行编码。

如果您接受来自客户端的任意HTML,则需要对其进行过滤以避免HTML注入。好好看看http://htmlpurifier.org.