使用PHP / Mysql的UTF-8,XML和htmlentities

时间:2011-01-19 17:56:10

标签: php xml utf-8 html-entities

我在网上发现了很多关于这个主题的不同/不一致的信息,所以我希望有人可以帮我解决这些问题:

我需要一个函数来清理字符串,以便可以安全地插入到utf-8 mysql数据库或写入utf-8 XML文件。应删除无法转换为utf-8的字符。

为了写入XML文件,我也遇到了将html实体转换为数字实体的问题。 htmlspecialchars()几乎一直在工作,但我已经读过,它不足以正确清理所有字符串,例如包含无效html实体的字符串。

感谢你的帮助,Brian

3 个答案:

答案 0 :(得分:0)

您没有说明字符串的来源,但如果您是从HTML表单提交中获取它们,请参阅此文章:

Setting the character encoding in form submit for Internet Explorer

长短,您需要明确告诉浏览器您希望表单提交的字符集。如果指定UTF-8,则永远不应从浏览器获取无效的UTF-8。如果您想保护自己免受任何类型的恶意攻击,您需要使用iconv:

http://www.php.net/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');