使用html_entity_decode解码HTML后,它无法正常显示

时间:2014-09-26 14:46:23

标签: php html

我遇到了一些我正在解码然后显示的HTML问题。

我从名为TinyMCE的WYSIWYG文本编辑器发布数据,并使用以下代码将其存储到数据库中(不包含不相关的代码)

$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标记的格式。

我在哪里错了?

感谢。

1 个答案:

答案 0 :(得分:0)

删除此:

$text = htmlentities($text);

此处标记的部分:

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

而且:

html_entity_decode($row['Content'])

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

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