如何从数据库中打印出存储的HTML?

时间:2015-03-14 13:47:49

标签: php html wysiwyg rich-text-editor

我在HTML表单中使用HTML rich text editor,来自富文本编辑器的数据被插入到MySQL数据库表中,插入名为first_page的列中,其类型设置为“TEXT”。 / p>

因此,如果在我的富文本编辑器中,我有以下文字:

<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而是输出数据,就像普通字符串一样,如下所示:

enter image description here

不确定我在哪里出错了,我想要的是让HTML实际打印为HTML而不是字符串。

已解决

正如@quentin建议的那样,我现在使用HTML Purifier来防止像XSS这样的东西。我的问题的实际答案是使用html_entity_decode将我的HTML解码回适用的字符。

2 个答案:

答案 0 :(得分:1)

从XSS中保护网站安全的方法是禁止用户将原始HTML输入数据库。

您无法同时禁止原始HTML并允许提交原始HTML。

您需要使用不同的机制替换对htmlspecialchars的调用以防止XSS(例如通过DOM解析器运行输入并使用白名单filtering标记和属性)。

(您还应该用prepared statements and placeholders替换stripslashes(对SQL注入无效)。)

答案 1 :(得分:-1)

您需要使用html_entity_decode将HTML实体转换回其标记。见http://php.net/manual/en/function.html-entity-decode.php

但请记住,这是一个&#34;快速&amp;脏&#34;解决方案,就像使用RegEx来解析HTML一样。我建议听听Quentin在下面的答案中写的内容。 :)