我在解码和显示一些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.