phpzip解压乱码怎么办
小编给大家分享一下php zip解压乱码怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
安泽网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、自适应网站建设等网站项目制作,到程序开发,运营维护。创新互联从2013年创立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。
php zip解压乱码的解决办法:首先将中文压缩包名用iconv函数转码;然后通过ZipArchive的对象处理zip文件;最后关闭处理的zip文件即可。

测试环境是windows7
中文的zip压缩包名和中文的文件名会导致PHP原生自带的ZipArchive乱码,导致extractTo方法失效:
open($zipfile); $toDir = "./test"; $s = $zip->extractTo($toDir); print_r(scandir($toDir)); //作者:Dorm_Script //链接:http://www.jianshu.com/p/3efa924fd809
参考一篇blog,原作的解决办法是:
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));
//作者:Dorm_Script
//链接:http://www.jianshu.com/p/3efa924fd809但是当$zipfile是中文编码时,也就是压缩包的名称是中文时,解压仍然会失败。
此时单独再将中文压缩包名用iconv函数转码后再使用:
//zip文件名
$fileName = '中文.zip';
//zip文件相对服务器根目录的保存路径
$uploads_dir = "/Public/zipUpload";
//zip文件完整的保存路径
$zipName = $_SERVER['DOCUMENT_ROOT'].$uploads_dir.'/'.$fileName;
//将目标路径名称赋值为fileName最后的'.zip'四个字符之外的全部字符构成的字符串
$toDir = $_SERVER['DOCUMENT_ROOT'].$uploads_dir.'/'.substr($fileName,0,strlen($fileName)-4);
$zip = new \ZipArchive;//新建一个ZipArchive的对象
/*
通过ZipArchive的对象处理zip文件
$zip->open这个方法的参数表示处理的zip文件名。
如果对zip文件对象操作成功,$zip->open这个方法会返回TRUE
*/
$res = $zip->open(iconv ( 'UTF-8', 'GB2312', $zipName));
if ($res === TRUE){
if (!is_dir(iconv ( 'UTF-8', 'GB2312', $toDir))) {
mkdir(iconv ( 'UTF-8', 'GB2312', $toDir), 0777, true);
}
//$zip->extractTo($toDir);
$docnum = $zip->numFiles;
for($i = 0; $i < $docnum; $i++) {
$statInfo = $zip->statIndex($i);
if($statInfo['crc'] == 0) {
//新建目录
mkdir(iconv ( 'UTF-8', 'GB2312', $toDir.'/'.$statInfo['name']), 0777, true);
} else {
//拷贝文件,特别的改动,iconv的位置决定copy能不能work
if(copy('zip://'.iconv ( 'UTF-8', 'GB2312', $zipName).'#'.$statInfo['name'], iconv ( 'UTF-8', 'GB2312', $toDir.'/'.$statInfo['name'])) == false){
echo 'faild to copy';
}
}
}
print_r(scandir(iconv ( 'UTF-8', 'GB2312',$toDir)));
$zip->close();//关闭处理的zip文件
}
else{
echo 'failed, code:'.$res.'
';
}上述代码的输出:
Array
(
[0] => .
[1] => ..
[2] => ��
[3] => Ҫ
)压缩包的目录:
中文.zip
├── 不
│ └── 要
│ └── dance.txt
└── 要
└── dance1.txt以上是php zip解压乱码怎么办的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!
新闻名称:phpzip解压乱码怎么办
URL标题:http://www.jxjierui.cn/article/pjhipg.html


咨询
建站咨询
