我遇到了一些我正在解码然后显示的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标记的格式。
我在哪里错了?
感谢。
答案 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。