【问题标题】:PHP: 2 strings - which one is UTF-8 and which one not?PHP:2 个字符串 - 哪个是 UTF-8,哪个不是?
【发布时间】: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);
}

The output of of script is these strings containing UTF-8 and - after a line break - the utf8_decode() string. Since some strings are double encoded, I decode all strings which you can see there.

结果是一个列表,其中包含一些条目,每个条目有 2 个字符串:一个是正确的,另一个是错误的。在这里你可以看到它。但是如何确定哪个是正确的呢?

我希望你能帮助我。提前致谢!

【问题讨论】:

  • 哇!那是一些看起来很糟糕的 UTF-8 支持
  • 你觉得好不好?你有更好的代码吗?我从unspecifiederror.net/2008/09/11/… 获得了代码(谢谢 miek)。

标签: php encoding utf-8 character-encoding


【解决方案1】:

mb_detect_encoding($text, "UTF-8");

您可能需要使用--enable-mbstring 构建php 或使用yum/apt 安装php-mbstring 包,但是php 可以帮助您检测多字节字符串编码。

【讨论】:

    【解决方案2】:

    您可以使用 utf8_decode 并检查您的 detectUTF8 函数是否仍然是有效的 UTF-8。

    【讨论】:

    • 谢谢,这么简单但我没发现! :D 它似乎工作,不是吗? bit.ly/wZPZm
    猜你喜欢
    • 1970-01-01
    • 2018-09-07
    • 2017-11-15
    • 2023-03-24
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    相关资源
    最近更新 更多