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

    php zip中文乱码怎么办

    藏色散人藏色散人2021-09-15 14:22:11原创95

    php zip中文乱码的解决办法:1、打开相应的PHP代码文件;2、用PHP的zip封装协议解压去解决ZipArchive乱码问题即可。

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

    php zip中文乱码怎么办?

    php解压zip文件 乱码问题

    官方的操作方法:

    <?php
    $zip = new \ZipArchive;
    $zipfile = "./test.zip";
    $res = $zip->open($zipfile);
    $toDir = "./test";
    
    $s = $zip->extractTo($toDir);
    print_r(scandir($toDir));

    存在的问题

    如果zip是在windows平台压缩的,那么在linux服务器执行以上代码将会出现乱码,同时解压出来的文件也会缺失

    解决方案

    问题分析:

    ZipArchive乱码,是因为编码不一致导致的,Windows的文件系统是gbk编码的,而PHP ZipArchive中的文件名是UTF-8编码的。Zip压缩包中如果文件名包含中文等特殊字符,用PHP ZipArchive解压乱码是必然的事情。ZipArchive压缩文件出现乱码或者无法将文件压缩进去,也是相同的道理

    解决思路

    不要用自带的ZipArchive::extractTo()方法去解压ZipArchive文档,改用PHP的zip封装协议解压去解决ZipArchive乱码。

    解决代码

    <?php
    $zip = new \ZipArchive;
    $zipfile = "./test.zip";
    $res = $zip->open($zipfile);
    
    $toDir = "./test";
    if(!file_exists($toDir)) {
       mkdir($toDir);
    }
    $docnum = $zip->numFiles;
    for($i = 0; $i < $docnum; $i++) {
       $statInfo = $zip->statIndex($i);
       if($statInfo['crc'] == 0) {
           //新建目录
           mkdir($toDir.'/'.substr($statInfo['name'], 0,-1));
       } else {
           //拷贝文件
           copy('zip://'.$zipfile.'#'.$statInfo['name'], $toDir.'/'.$statInfo['name']);
       }
    }
    
    print_r(scandir($toDir));

    推荐学习:《PHP视频教程

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

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:php zip
    上一篇:如何解决php is_writable 失败问题 下一篇:php怎么修改文件的名字
    线上培训班

    相关文章推荐

    • php显示繁体乱码怎么办• php乱码怎么改编码• php ajax获取中文乱码怎么办• 怎么解决php读取数据库中文乱码问题• php写入txt文件后字符乱码怎么办

    全部评论我要评论

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

    PHP中文网