可能重复:
如何在PHP中检测文件编码
我该如何使用PHP确定一个文件的编码格式?
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);
}
mb_detect_encoding可以完成这项工作。
http://us.php.net/manual/en/function.mb-detect-encoding.php
在默认设置下,它只能检测ASCII、UTF-8和一些日语JIS变体。如果您手动指定,它可以配置为检测更多的编码方式。如果一个文件既是ASCII又是UTF-8,则会返回UTF-8。
除非文件内部某处有提示,否则你无法确定它的编码方式。
例如,HTML 文件应该在顶部附近包含一个 content-type 的 meta 标签,以便您的网络浏览器知道使用的编码方式。例如:
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
或者
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
有一些方法可以通过查看文件并发现暗示某些编码的字节序列来猜测编码,但这些只是猜测。
我认为BlackAura的建议非常好。
另一个选项是使用system()或类似函数在相关文件上调用file(1)命令。通常,它能够告诉你编码方式。该命令应该适用于任何健全的UNIX环境。