如何解码除html实体之外的所有实体

时间:2011-12-02 12:51:11

标签: php html-entities html-encode

我有一个字符串,其中包含特殊字母,如“á”和htmlcode,如“<input type='text' />”。当我将此字符串存储在我的数据库中时,我使用:htmlentities($string, ENT_QUOTES);。 问题是当我输出文本时,我使用html_entity_decode($string_from_db, ENT_QUOTES)和数据库中的所有实体,如“&aacute;”表示字母,“<input type='text' title="LA1&qu...”表示htmlcode被转换。所以我的输出会显示“á”字母和一个不正常的文本字段。我希望这封信是这样的,但对于该字段,我想显示代码“<input type='text' />”而不是实际字段。

我需要这个多语言网站,有很多用户输入,所以我需要能够正确处理特殊字母,但也要保护输入错误。任何建议都非常有用。

2 个答案:

答案 0 :(得分:0)

您可以在htmlspecialchars之后再追加html_entity_decode;该函数只会将HTML中具有特殊功能的字符转换为它们的实体:

htmlspecialchars(html_entity_decode($string_from_db, ENT_QUOTES), ENT_QUOTES)

这应该注意结果字符串没有未编码的html字符。当然,在性能方面,这可能不是最好的解决方案,但它很简单!

答案 1 :(得分:0)

好吧,好像我想出来了......至少目前如此。这就是我正在做的事情:

  1. 用户提交的文本我用以下方式清理它:

    function sanitize_form_input($string) {
        $string = mysql_real_escape_string($string);
        return $string;
    }
    
  2. 获得页面编码,php编码,html编码,mysql编码......以及编码设置为UTF-8的任何其他可能的东西。

  3. 输出文字:

    function sanitize_db_output($string) {
        return htmlentities(stripslashes($string), ENT_QUOTES, 'UTF-8');
    }
    
  4. 如果这是一种错误的方法,请告诉我。