我有问题。在我的数据库中,我允许用户通过包含html实体和明文的输入提交帖子标题。根据我的阅读,我使用mysqli_real_escape_string在将其添加到数据库之前转义它们的帖子,然后在将html输出到页面时使用htmlentities。但是,如果用户发布类似
的内容 <div>( ͡° ͜ʖ ͡°)</div>
它将mysqli转义并以
的形式存储在数据库中"<div>( ͡° ͜ʖ ͡°)</div>"
如果我在输出时对此字符串使用htmlentities,它将不返回任何内容。 这必须与字符串中已有的html实体有关,因为如果我测试
<div>plaintext</div>
它工作正常。如何转义html实体,例如&lt;和&gt;在已经包含编码实体的字符串中?
答案 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()
但我不明白你为什么会这样做。