使用PHP清理UTF-16 / CJK字符?

时间:2010-09-11 08:15:09

标签: php utf-8 character-encoding utf-16 cjk

我的计算机上有一些文件是UTF-16,虽然这似乎是因为文件的错误或损坏而不是意图 - 它们应该是简单的英语。我上传了其中一个(here)。如果我在UTF-8中将编码保留在Firefox(Viwe>字符编码)中,那么我会得到大量的胡言乱语(请参阅screenshot)。如果我将编码更改为UTF-16,那么它看起来要好得多(参见screenshot2),尽管仍然存在一堆CJK字符。

我想浏览所有这些文件并清理它们,并且可能以utf-8格式保存它们(我将把内容插入到使用utf8_general_ci排序规则的mysql表中)。有谁知道如何用PHP自动化方式做到这一点?如果您尝试以UTF-8查看它,我想摆脱文件显示的所有时髦字符,如果您以UTF-16查看,我还想显示所有CJK字符。

1 个答案:

答案 0 :(得分:3)

这应该可以解决问题:

$txt = file_get_contents('watches.txt');
$txt = mb_convert_encoding($txt, 'UTF-8');
/*Nice regexp to strip non asci and non-printable chars*/
$txt = preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+/S','',$txt);
$txt = preg_replace('/[^\x00-\x7F]+/S','',$txt);

echo $txt;