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

问题描述:

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

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

好吧,看来我明白了......至少现在。下面是我在做什么:

  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'); 
    } 
    

请让我知道这是一个错误的方式来做到这一点。

+0

你为什么要做stripslashes?您的代码是否也会将所有角色显示为实体,如您所说,您不希望对我的回答发表评论?我认为我的答案的更新应该适合你... – codeling

您可以在html_entity_decode后再做htmlspecialchars;该功能将仅转换其在HTML中具有特殊的功能,他们的实体中的字符:

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

这应该照顾的是,得到的字符串没有未编码的HTML字符。当然,性能方面,这可能不是最好的解决方案,但很简单!

+0

这不会帮助我,因为它也会转换字母:| –

+0

对不起,本来打算使用'htmlspecialchars' ... – codeling