我在网上发现了很多关于这个主题的不同/不一致的信息,所以我希望有人可以帮我解决这些问题:
我需要一个函数来清理字符串,以便可以安全地插入到utf-8 mysql数据库或写入utf-8 XML文件。应删除无法转换为utf-8的字符。
为了写入XML文件,我也遇到了将html实体转换为数字实体的问题。 htmlspecialchars()几乎一直在工作,但我已经读过,它不足以正确清理所有字符串,例如包含无效html实体的字符串。
感谢你的帮助,Brian
答案 0 :(得分:0)
您没有说明字符串的来源,但如果您是从HTML表单提交中获取它们,请参阅此文章:
Setting the character encoding in form submit for Internet Explorer
长短,您需要明确告诉浏览器您希望表单提交的字符集。如果指定UTF-8,则永远不应从浏览器获取无效的UTF-8。如果您想保护自己免受任何类型的恶意攻击,您需要使用iconv:
$ utf_8_string = iconv($ from_charset,$ to_charset,$ original_string);
如果将$ utf-8指定为$ from_charset和$ to_charset,则如果$ original_string包含无效的UTF-8,则iconv()应返回错误。
如果您从不同的来源获取字符串并且您知道字符编码,则仍然可以使用iconv()。美国的典型编码是CP-1252(Windows)和ISO-8859-1(其他一切)。
答案 1 :(得分:0)
这样的东西?
function cleanse($in) {
$bad = Array('”', '“', '’', '‘');
$good = Array('"', '"', '\'', '\'');
$out = str_replace($bad, $good, $in);
return $out;
}
答案 2 :(得分:0)
您可以使用iconv或mbstring将字符串从任何编码转换为UTF-8:
// With the //IGNORE flag, this will ignore invalid characters
iconv('input-encoding', 'UTF-8//IGNORE', $the_string);
或
mb_convert_encoding($the_string, 'UTF-8', 'input-encoding');