【发布时间】:2009-06-12 20:39:57
【问题描述】:
我有一个包含大量字符串的数据库。其中有些是正确的 UTF-8 编码,有些则不是。因此,我设置了一个从数据库中选择 100 个字符串的脚本。下面的函数判断一个字符串是否包含 UTF-8(不管它是否正确):
function detectUTF8($text) {
return preg_match('%(?:
[\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
|\xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
|\xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
|\xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
|[\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
|\xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)+%xs',
$text);
}
结果是一个列表,其中包含一些条目,每个条目有 2 个字符串:一个是正确的,另一个是错误的。在这里你可以看到它。但是如何确定哪个是正确的呢?
我希望你能帮助我。提前致谢!
【问题讨论】:
-
哇!那是一些看起来很糟糕的 UTF-8 支持
-
你觉得好不好?你有更好的代码吗?我从unspecifiederror.net/2008/09/11/… 获得了代码(谢谢 miek)。
标签: php encoding utf-8 character-encoding