问题所在。我已经找到了很多关于如何在读入文本时去除字节顺序标记的建议,但这似乎是错误的。是否有一种标准的语言方式可以读取Unicode文件并正确识别和处理BOM?
答案 0 :(得分:1)
不。你必须手动完成。
BOM是UTF-16LE和UTF-16BE编码中信令字节顺序的一部分,因此UTF-16解码器自动删除它有很多意义(很多人都这样做。)
然而,UTF-8始终具有相同的字节顺序,并且旨在实现ASCII兼容性,因此包括BOM从未被设想为指定的编码方案的一部分,因此实际上它不应该接受任何特殊处理UTF-8解码器。
UTF-8虚假BOM不是编码的一部分,而是一些(主要是微软)应用程序用来表示该文件可能是UTF-8的临时(并且有些争议)标记。它本身并不是一个标准,所以基于UTF-8的规范,如XML和JSON,必须为它做出特殊的分配。
答案 1 :(得分:1)
有同样的问题。我的函数_fread()将删除Bom并解决了 给我的问题...
/**
* Read local file
* @param file local filename
* @return Data from file, or false on failure
*/
function _fread ($file = null) {
if ( is_readable($file) ) {
if ( !($fh = fopen($file, 'r')) ) return false;
$data = fread($fh, filesize($file));
// remove bom
$bom = pack('H*','EFBBBF');
$data = preg_replace("/^$bom/", '', $data);
fclose($fh);
return $data;
}
return false;
}