美文网首页PHP经验分享
php解压zip文件 乱码问题

php解压zip文件 乱码问题

作者: Dorm_Script | 来源:发表于2016-11-17 00:02 被阅读2498次

官方的操作方法:

<?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解压zip文件 乱码问题

    官方的操作方法: 存在的问题 如果zip是在windows平台压缩的,那么在linux服务器执行以上代码将会出现乱...

  • python3中zipfile解压zip文件,中文文件名存在乱码

    python3中使用zipfile解压zip文件,解压后存在中文文件名存在乱码问题,其主要原因是:在zip标...

  • Ubuntu解压zip压缩包中文乱码

    Ubuntu自带的解压工具zip解压的时候总是中文乱码,使用unar工具可以完美地解决zip解压乱码问题,操作也很...

  • 2019-07-31

    Mac上直接解压Zip文件乱码 问题描述: zip为windows平台常用压缩文件格式,在团队协作中,经常会碰到同...

  • [Linux] 解压zip文件中文乱码问题解决

    在Linux下,解压电脑上的.zip文件时,有时候由于编码问题,中文文件名或者文件夹名会出现乱码…… 为了方便,于...

  • iOS解压zip和rar文件

    最近在iOS开发中遇到解压文件的问题,需要同时支持解压zip和rar文件。首先说解压zip,用到了ZipZap这个...

  • 常用Linux指令

    解压windows下压缩的zip文件(中文乱码) 解决阿里云服务器断开 postgresql开启远程访问配置文件都...

  • Linux文件解压压缩命令

    tar文件 解压zip 文件 压缩zip文件

  • PHP在线解压ZIP文件

    解压步骤:第一步、把unzip.php或upzid.php(2选1即可)通过 FTP上传到压缩包所在的文件夹;第二...

  • go 处理zip解压时乱码问题

    问题 go语言自带的zip包可以解压zip文件然而,如果你用winrar压缩成zip后。再用go去解压会发现文件名...

网友评论

    本文标题:php解压zip文件 乱码问题

    本文链接:https://www.haomeiwen.com/subject/ebfdpttx.html