php 解压乱码怎么办,怎样处理php zip解压乱码的问题_后端开发

php zip解压乱码的处理办法:首先将中文压缩包名用iconv函数转码;然后经由过程ZipArchive的对象处置惩罚zip文件;末了封闭处置惩罚的zip文件即可。

f8b235f3281c4cd8ec35b2e1661e8413.png

引荐:《PHP视频教程》

测试环境是windows7

中文的zip压缩包名和中文的文件名会致使PHP原生自带的ZipArchive乱码,致使extractTo要领失效:

$zip = new \ZipArchive;

$zipfile = "./test.zip";

$res = $zip->open($zipfile);

$toDir = "./test";

$s = $zip->extractTo($toDir);

print_r(scandir($toDir));

//作者:Dorm_Script

//链接:http://www.jianshu.com/p/3efa924fd809

参考一篇blog,原作的处理办法是:

$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));

//作者: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解压乱码的问题的细致内容,更多请关注ki4网别的相干文章!

收藏 | 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值