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

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

file_get_content 后的结果

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

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

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

focus
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2

可参考如下方式转换:

$str = file_get_contents('filename.txt');
$str = mb_convert_encoding($str, "UTF-8", "GBK");
var_dump($str);
2个月前 评论
php_yt (楼主) 2个月前
人厶八夂 2个月前
php_yt (楼主) 2个月前
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';
}
2个月前 评论

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