• 技术文章 >后端开发 >PHP问题

    php ziparchive中文乱码怎么办

    藏色散人藏色散人2021-05-28 09:31:05原创236

    php ziparchive中文乱码的解决办法:首先打开压缩包将内部文件名及目录进行转码;然后在转码后关闭压缩包并重新打开解压即可。

    本文操作环境:Windows7系统、PHP7.1版,DELL G3电脑

    解决php使用ZipArchive解压时中文乱码问题

    使用php自带的ZipArchive来解压带中文文件名压缩包时会造成乱码,现象如下:

    原结构:

     

    解压代码:

    $zip = new \ZipArchive();
    $res = $zip->open('./钱学森班.zip');
    if ($res !== true){    
    throw new \Exception('打开压缩包失败');
    }$zip->extractTo('./cache');
    $zip->close();

    解压后:

     

    原因

    默认windows,mac打压缩包时编码为简体中文,解压时未作文件转化导致解压结果与预期不符

    解决方法

    打开压缩包后先将内部文件名及目录进行转码,转码后需关闭压缩包并重新打开解压

    实现如下:

    $zipName = './钱学森班.zip';
    $zip = new \ZipArchive();
    $res = $zip->open($zipName);
    if ($res !== true){
        throw new \Exception('打开压缩包失败');
    }
    
    // 加入此段↓
    $fileNum = $zip->numFiles;
    for ($i = 0; $i < $fileNum; $i++) {
        $statInfo = $zip->statIndex($i, ZipArchive::FL_ENC_RAW);
        $zip->renameIndex($i, iconv('GBK', 'utf-8//IGNORE', $statInfo['name']));
    }
    $zip->close();
    $zip->open($zipName);
    // 截至↑
    
    $zip->extractTo($extractTo);
    $zip->close();

    注意事项

    推荐学习:《PHP视频教程

    以上就是php ziparchive中文乱码怎么办的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:php ziparchive
    上一篇:详细介绍PHP中json_encode函数参数 下一篇:PHP如何使用Mcrypt加密
    大前端线上培训班

    相关文章推荐

    • php下载doc乱码怎么办• 如何解决html form乱码问题• php explode中文乱码怎么办• html post乱码怎么办• 如何解决php md5生成16位出现乱码问题

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网