php 怎么处理 非 utf-8 编码的文件?

php 怎么处理 非 utf-8 编码的文件?

file_get_content 后的结果

php 怎么处理 非 utf-8 编码的文件?

试着获取文件编码格式为 ISO-8859-1

试了很多方法,php 都不能解析出来,当把这个文件另存为 utf-8 编码的文件后,使用 json_decode 就能解析了,问题是怎么解析原格式的文件呢?

welcome come back
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2

可参考如下方式转换:

$str = file_get_contents('filename.txt');
$str = mb_convert_encoding($str, "UTF-8", "GBK");
var_dump($str);
3年前 评论
php_yt (楼主) 3年前
人厶八夂 3年前
php_yt (楼主) 3年前
public function detect_utf_encoding($filename){        
        if( 'UTF-16LE' === $this->utf_encoding( $filename )){
            return iconv('UTF-16', 'UTF-8', file_get_contents( $filename ));
        }else {
            return file_get_contents( $filename );
        }
}

public function utf_encoding($filename) {

    $utf32_big_bom = chr(0x00) . chr(0x00) . chr(0xFE) . chr(0xFF);
    $utf32_little_bom = chr(0xFF) . chr(0xFE) . chr(0x00) . chr(0x00);
    $utf16_big_bom = chr(0xFE) . chr(0xFF);
    $utf16_little_bom = chr(0xFF) . chr(0xFE);
    $utf8_bom = chr(0xEF) . chr(0xBB) . chr(0xBF);

    $text = file_get_contents($filename);
    $first2 = substr($text, 0, 2);
    $first3 = substr($text, 0, 3);
    $first4 = substr($text, 0, 3);

    if ($first3 == $utf8_bom)
    return 'UTF-8';
        elseif ($first4 == $utf32_big_bom)
            return 'UTF-32BE';
        elseif ($first4 == $utf32_little_bom)
            return 'UTF-32LE';
        elseif ($first2 == $utf16_big_bom)
            return 'UTF-16BE';
        elseif ($first2 == $utf16_little_bom)
            return 'UTF-16LE';
}
3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!