【发布时间】:2015-03-14 13:47:49
【问题描述】:
我在 HTML 表单中使用 HTML rich text editor,来自富文本编辑器的数据被插入到 MySQL 数据库表中的一个名为 first_page 的列中,该列的类型设置为“TEXT”。
所以如果在我的富文本编辑器中我有以下文本:
<h4 style="text-align: center;">Write your first page!</h4>
在插入数据之前,我会执行以下操作以确保数据免受任何 HTML 注入:
trim(stripslashes(htmlspecialchars($variable)));
然后当我提交表单时,数据库中的数据如下所示:
&lt;h4 style=&quot;text-align: center;&quot;&gt;Write your first page!&lt;/h4&gt;
然后,当我编写查询并在单独的页面上打印列的值时,它不会解释 HTML,而是像普通字符串一样输出数据,如下所示:
不知道我哪里出错了,我想要的是将 HTML 实际打印为 HTML 而不是字符串。
已解决
正如@quentin 所建议的,我现在使用HTML Purifier 来防止XSS 之类的东西。我的问题的实际答案是使用 html_entity_decode 将我的 HTML 解码回适用的字符。
【问题讨论】:
-
你能贴一些代码吗?
-
您需要将
HTML entities转换回它们的标记,例如使用html_entity_decode。 php.net/manual/en/function.html-entity-decode.php -
@MarioWerner 太棒了,成功了。如果您可以将其写为答案,我会接受。
-
嗯... 不要
htmlspecialchars你的HTML...!?当然,那么您就可以进行 HTML 注入了。不能两全其美。如果您想接受 HTML 而不接受 arbitrary HTML,则需要一个良好的选择性清理库。 -
用
htmlspecialchars编码文本然后用html_entity_decode将其转换回来是没有意义的。您应该删除htmlspecialchars.而不是添加html_entity_decode。
标签: php html wysiwyg rich-text-editor