我正在使用PHP处理来自各种来源的文本。我预计这些文本都是UTF-8、ISO 8859-1或者Windows-1252编码。如果它们不是这三种编码之一,我只需要确保该文本转换为有效的UTF-8字符串,即使存在某些字符丢失的情况。iconv中的//TRANSLIT选项能够解决这个问题吗?
例如,以下代码是否能确保将一个字符串安全地插入到UTF-8编码的文档(或数据库)中?
function make_safe_for_utf8_use($string) {
$encoding = mb_detect_encoding($string, "UTF-8,ISO-8859-1,WINDOWS-1252");
if ($encoding != 'UTF-8') {
return iconv($encoding, 'UTF-8//TRANSLIT', $string);
}
else {
return $string;
}
}
chr(0)
)。对于可打印字符来说还好,但不适用于通用的UTF-8... - ircmaxell^(a)+$
也无法处理203字节的输入……这肯定不能被期望或接受吧?就我所知,在使用PCRE的R中它似乎工作得很好。我认为Rasmus忽略了一个真正的问题。 :-( - bobince