如何阅读UTF8+;是否使用PHP创建BOM表文件,而不将BOM表显示为内容?

如何阅读UTF8+;是否使用PHP创建BOM表文件,而不将BOM表显示为内容?,php,unicode,utf-8,Php,Unicode,Utf 8,问题说的差不多。我已经找到了很多关于文本读入后如何去除字节顺序标记的建议,但这似乎是错误的。在这种语言中,是否有一种标准的方法可以正确识别和处理BOM并读取Unicode文件?没有。你必须手动操作 BOM是UTF-16LE和UTF-16BE编码中的信令字节顺序的一部分,因此UTF-16解码器自动删除BOM是有意义的(许多解码器都是这样做的) 然而,UTF-8始终具有相同的字节顺序,并且旨在实现ASCII兼容性,因此从未设想将BOM作为指定的编码方案的一部分,因此实际上,它不应该接受UTF-8解码

问题说的差不多。我已经找到了很多关于文本读入后如何去除字节顺序标记的建议,但这似乎是错误的。在这种语言中,是否有一种标准的方法可以正确识别和处理BOM并读取Unicode文件?

没有。你必须手动操作

BOM是UTF-16LE和UTF-16BE编码中的信令字节顺序的一部分,因此UTF-16解码器自动删除BOM是有意义的(许多解码器都是这样做的)

然而,UTF-8始终具有相同的字节顺序,并且旨在实现ASCII兼容性,因此从未设想将BOM作为指定的编码方案的一部分,因此实际上,它不应该接受UTF-8解码器的任何特殊处理


UTF-8人造BOM不是编码的一部分,而是一些(主要是Microsoft)应用程序用来表示文件可能是UTF-8的一个特殊(且有点争议)标记。它本身并不是一个标准,所以基于UTF-8的规范,如XML和JSON,必须对其进行特殊处理。

不。你必须手动操作

BOM是UTF-16LE和UTF-16BE编码中的信令字节顺序的一部分,因此UTF-16解码器自动删除BOM是有意义的(许多解码器都是这样做的)

然而,UTF-8始终具有相同的字节顺序,并且旨在实现ASCII兼容性,因此从未设想将BOM作为指定的编码方案的一部分,因此实际上,它不应该接受UTF-8解码器的任何特殊处理


UTF-8人造BOM不是编码的一部分,而是一些(主要是Microsoft)应用程序用来表示文件可能是UTF-8的一个特殊(且有点争议)标记。它本身并不是一个标准,因此基于UTF-8的规范,如XML和JSON,必须对其进行特殊处理。

也有同样的问题。我的函数_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;
}

我也有同样的问题。我的函数_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;
}