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

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

file_get_content 后的结果

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

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

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

welcome come back
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 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';
}
3年前 评论

可参考如下方式转换:

$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年前

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