如何在包含实体的字符串上使用 PHP htmlentities


How to use PHP htmlentities on strings containing entities

>我有一个问题。在我的数据库中,我允许用户通过包含html实体和纯文本的输入提交帖子标题。根据我所读到的内容,我在将他们的帖子添加到数据库之前使用mysqli_real_escape_string来转义他们的帖子,然后在将 html 输出到页面上时使用 html实体。但是,如果用户发布类似

 <div>( ͡° ͜ʖ ͡°)</div>

它使mysqli转义并存储在数据库中

"<div>( &#865;° &#860;&#662; &#865;°)</div>"

如果我在输出时在此字符串上使用 html实体,它将不返回任何内容。这一定与字符串中已有的 html 实体有关,因为如果我测试

<div>plaintext</div>

它工作正常。如何在已包含编码实体的字符串中转义 html 实体(如 <和>)?

htmlentities 的目的是将特殊字符转换为浏览器可渲染的字符串。浏览器将呈现转换后的字符,因此不需要通过 htmlentity 重新转换。

(发布)->html实体->mysqli_real_escape_string->(存储)->(选择)->(显示)

最好的做法是在保存到数据库之前转换为 html实体,然后将其输出到您的页面而不进行过滤或处理。所以你还行

只是不要在输出上再次使用 html实体...

但如果你真的需要...使用html_entity_decode();将它们转换回来请参阅:http://php.net/manual/fr/function.html-entity-decode.php

然后使用htmlentities()

但我不明白你为什么要这样做。