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

时间:2015-03-10 20:26:47

标签: php html

我有问题。在我的数据库中,我允许用户通过包含html实体和明文的输入提交帖子标题。根据我的阅读,我使用mysqli_real_escape_string在将其添加到数据库之前转义它们的帖子,然后在将html输出到页面时使用htmlentities。但是,如果用户发布类似

的内容
 <div>( ͡° ͜ʖ ͡°)</div>

它将mysqli转义并以

的形式存储在数据库中
"<div>( &#865;° &#860;&#662; &#865;°)</div>"

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

<div>plaintext</div>

它工作正常。如何转义html实体,例如&lt;和&gt;在已经包含编码实体的字符串中?

2 个答案:

答案 0 :(得分:0)

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

(POST) - &GT; htmlentities-&GT; mysqli_real_escape_string-&GT;(存储) - &GT;(SELECT) - &GT;(显示器)

答案 1 :(得分:0)

最好在保存到数据库之前转换为htmlentities,然后将其输出到您的页面而不进行过滤或处理。所以你的确定

只是不要在输出上再次使用htmlentities ...

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

然后使用htmlentities()

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