如何解码除html实体外的所有实体
我有一个字符串,其中包含特殊字母,如“á
”和htmlcode,如“<input type='text' />
”。当我在DB中存储这个字符串时,我使用:htmlentities($string, ENT_QUOTES);
。 问题是当我输出文本时,我使用了html_entity_decode($string_from_db, ENT_QUOTES)
以及我在数据库中使用的所有实体,如字母“á
”和“<input type='text' title="LA1&qu...
”以获得转换后的htmlcode。所以我的输出将显示“á
”字母和一个不正常的文本字段。我希望这封信是这样的,但是对于我想要显示代码“<input type='text' />
”的字段而不是实际字段。如何解码除html实体外的所有实体
我需要这个多语言网站用户输入很多,所以我需要能够正确处理特殊字母,但也保护不良输入。任何建议都非常令人满意。
好吧,看来我明白了......至少现在。下面是我在做什么:
-
用户提交我清理它的文字:
function sanitize_form_input($string) { $string = mysql_real_escape_string($string); return $string; }
了页面编码,PHP编码,HTML编码,MySQL的编码...任何编码设置为UTF-8的其他可能的事情。
-
输出与文本:
function sanitize_db_output($string) { return htmlentities(stripslashes($string), ENT_QUOTES, 'UTF-8'); }
请让我知道这是一个错误的方式来做到这一点。
您可以在html_entity_decode
后再做htmlspecialchars
;该功能将仅转换其在HTML中具有特殊的功能,他们的实体中的字符:
htmlspecialchars(html_entity_decode($string_from_db, ENT_QUOTES), ENT_QUOTES)
这应该照顾的是,得到的字符串没有未编码的HTML字符。当然,性能方面,这可能不是最好的解决方案,但很简单!
这不会帮助我,因为它也会转换字母:| –
对不起,本来打算使用'htmlspecialchars' ... – codeling
你为什么要做stripslashes?您的代码是否也会将所有角色显示为实体,如您所说,您不希望对我的回答发表评论?我认为我的答案的更新应该适合你... – codeling