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

How to print out stored HTML from Database?

我在 HTML 表单中使用 HTML rich text editor,富文本编辑器中的数据被插入 MySQL 数据库 table 中名为 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 to prevent against stuff like XSS. The actual answer to my question was to decode my HTML back to their applicable characters using html_entity_decode

您采取的使您的站点免受 XSS 攻击的方法是禁止用户将原始 HTML 输入数据库。

您不能同时禁止提交原始 HTML 和允许提交原始 HTML。

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

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

您需要将 HTML 实体转换回它们的标记,例如使用 html_entity_decode。参见 http://php.net/manual/en/function.html-entity-decode.php

但请记住,这是一个 "quick & dirty" 解决方案,例如使用 RegEx 解析 HTML。我建议听听昆汀在下面的答案中写的内容。 :)