获取文件编码

pow*_*tac 3 php encoding utf-8

可能重复:
在PHP中检测文件编码

我怎么能用PHP弄清楚文件编码的文件是什么?

pil*_*lif 8

检测编码对于所有8位字符集来说确实很难,但是utf-8(因为不是每8位字节序列都是有效的utf-8)并且通常需要对要检测编码的文本的语义知识.

想一想:任何特定的纯文本信息只是一堆字节,没有关联的编码信息.如果你查看任何特定的字节,它可能意味着什么,所以为了有机会检测编码,你必须在其他字节的上下文中查看该字节,并尝试基于可能的语言组合的一些启发式.

对于8位字符集,您永远无法确定.

举例说明启发式错误的示例:

http://www.hoax-slayer.com/bush-hid-the-facts-notepad.html

一些16位集合,您有机会检测,因为它们可能包含字节顺序标记或将每个第二个字节设置为0.

如果你只是想检测UTF-8,你可以使用已经解释过的mb_detect_encoding,或者你可以使用这个方便的小函数:

function isUTF8($string){
    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', $string);
}
Run Code Online (Sandbox Code Playgroud)