在 textarea 中使用 htmlentities 转义 HTML,但返回数据库 HTML

Escaping HTML using htmlentities in textarea but turn back to HTML for database

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

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

<p>hellos friend</p>

所以我使用 PDO 将这一行粘贴到数据库中而不对其进行转义,一切都很好,显示效果很好。现在,我希望网页设计师能够编辑它,所以当我将它从数据库中拉出时,我在之后使用此代码:

$post = htmlentities($post);

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

<textarea>$post</textarea>

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

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

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

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

如果网页设计师告诉其他人怎么办"Hey man, this is what an html entity is, it is typed like this: & lt; you should use it"

然后结果会陷入非实体状态,明白我的意思吗?有溶质吗?

我认为您正在寻找 html_entity_decode() 函数。它与 htmlentities() 相反。它将 < 转换回 <

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

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