【问题标题】:Escaping HTML using htmlentities in textarea but turn back to HTML for database使用 textarea 中的 htmlentities 转义 HTML,但返回到数据库的 HTML
【发布时间】:2015-09-06 03:12:42
【问题描述】:

所以我有一个小问题。我正在开发的 PHP 程序有时允许网页设计师发布一些代码,并被放入后端数据库。有时设计师可能还想讨论 html 实体。

假设设计者向数据库中添加了这样一行代码:

<p>hellos friend</p>

所以我使用 PDO 将这条线粘贴到数据库中而不转义它,一切都很好,它显示得很好。现在,我希望网页设计师能够对其进行编辑,因此当我将其从数据库中提取出来时,我会使用以下代码:

$post = htmlentities($post);

现在我可以将它插入到我的编辑器中了:

<textarea>$post</textarea>

但是我们遇到了问题,因为当这个人编辑这段代码时,他提交并返回到数据库中,现在它得到了 HTML 实体并且有 & lt ; 而不是 & gt ; 而不是 >(很难在 SA 上输入它,它会重新编码)

&lt;p&gt;hellos friend&lt;/p&gt;

所以现在它在数据库中是错误的,所以当我再次显示它时,它会显示实体。

所以也许我可以在编辑后运行 htmlentities 的反面并重新添加所有实体,如果有这样的事情,但这会带来另一个问题:

如果网页设计师告诉其他人“嘿,这就是一个 html 实体,它的类型是这样的:& lt; 你应该使用它”

然后那将被证明是回到不是一个实体,你明白我的意思吗?有溶质吗?

【问题讨论】:

    标签: php textarea xss html-entities


    【解决方案1】:

    我认为您正在寻找html_entity_decode() 函数。它是htmlentities() 的反面。它将 &lt 转换回

    http://php.net/manual/en/function.html-entity-decode.php

    对于您的第二个问题,您需要让设计人员以某种方式转义 html 实体。我不认为 PHP 有办法逃避它们,但我可能是错的。这可能是您必须自己实现的东西,例如让设计人员在实体前面放置一个\ 以将其与假定转换为 HTML 的实体区分开来,然后解析输入以查找转义实体。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-16
      • 2015-11-24
      • 2016-05-10
      • 1970-01-01
      • 2010-11-24
      • 2020-09-22
      • 2010-10-24
      • 2023-02-02
      相关资源
      最近更新 更多