php zip 文件名乱码,如何解决php zip解压乱码的问题
php zip解压乱码的解决办法:首先将中文压缩包名用iconv函数转码;然后通过ZipArchive的对象处理zip文件;最后关闭处理的zip文件即可。
推荐:《PHP视频教程》
测试环境是windows7
中文的zip压缩包名和中文的文件名会导致PHP原生自带的ZipArchive乱码,导致extractTo方法失效:<?php
$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,原作的解决办法是:<?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));
//作者: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 文件名乱码,如何解决php zip解压乱码的问题相关推荐
- linux 解压文件乱码,云服务器:解决linux下zip文件解压乱码问题
云服务器:解决linux下zip文件解压乱码问题 原因 由于zip格式并没有指定编码格式,Windows下生成的zip文件中的编码是GBK/GB2312等,因此,导致这些zip文件在Linux下解压时 ...
- linux php 压缩中文乱码,linux下zip文件解压乱码问题的解决办法分享
本篇文章主要介绍了解决linux下zip文件解压乱码问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下. 原因 由于zip格式并没有指定编码格式,Windows下生成的zip文件中的编码是GBK/ ...
- linux中zip文件编码错误,解决linux下zip文件解压乱码问题
原标题:解决linux下zip文件解压乱码问题 解决linux下zip文件解压乱码问题 原因 由于zip格式并没有指定编码格式,Windows下生成的zip文件中的编码是GBK/GB2312等,因此, ...
- Arch Linux下解决zip解压乱码的方法
Arch Linux下解决zip解压乱码的方法 完全转载于一个大佬的论坛发帖,感觉很有用但没有搜到CSDN的相关文章所以转过来,瑟瑟发抖 安装unarchiver,用unar解压zip文件.(给kde ...
- 压缩包解压乱码,zip格式,压缩包下载下来正常
压缩包格式zip 下载正常,在别的电脑上正常解压.只有在这个电脑上win7 系统.解压乱码,文件内用,名字都是乱码.换压缩软件就好了,看资料说是旧的解压软件版本太低,使用的编码还是国标,现在都是utf ...
- linux系统下tar/gz/7z/xz/bz2/zip等各种格式的打包压缩解压
linux系统下总会遇到各种格式的压缩包,什么tar/gz/7z/xz/bz2/zip等等,每种格式文件的解压和压缩方法都不完全一致,所携带的参数也都各有千秋,初学者往往会一脸茫然,不知如何是好.于是 ...
- Python自动化,破解zip密码,提取密码,自动解压
使用john,破解简单的6位纯数字密码 + 身份证后6位密码 安装: git clone https://github.com/magnumripper/JohnTheRipper.gitcd Joh ...
- 乌班图系统解决zip解压乱码问题
在ubuntu系统中 我们解压 zip 文件的时候 如果有中文名称 就会被间隙成乱码 比如这样子 ╧ε─┐╫╩┴╧ 虽然不影响文件的使用 但是看不到文件名称 也是很烦 其原因也很简单 原因 Windo ...
- html文件名解压乱码怎么办,压缩文件解压后乱码怎么办?解压乱码解决办法
不少网友都表示在双击打开压缩文件打开是乱码的情况.我们都知道双击打开压缩包里的压缩文件就是操作系统系统在调用相关的程序打开压缩包里面的文件.一般我们电脑中安装都是WinRAR软件,在默认情况下,是可以 ...
最新文章
- JVM - 再聊GC垃圾收集算法及垃圾收集器
- zzuli 2269:minval
- 摩托罗拉周二将正式分拆为两经营实体
- [SpringBoot2]数据访问_数据库场景的自动配置分析和整合测试
- FAT12中,如何定位大于一个扇区(512B)的文件内容
- 会话标识未更新 java_Appscan漏洞之会话标识未更新
- Linux 高性能服务器编程——多线程编程
- drools动态配置规则_基于 Flink 和 Drools 的实时日志处理
- 谷歌开源BoTNet | CNN与Transformer结合!Bottleneck Transformers for Visual Recognition!CNN+Transformer!
- OpenStack 是什么
- Linux App Summit(LAS)社区 KDE Gnome
- 《算法竞赛进阶指南》0.1位运算
- php input样式,input能改变css样式吗
- 智能控制在计算机领域的应用,智能控制的主要应用领域
- 网络工程师/技术支持工程师面试题(1)
- Lazada市场大数据分析,东南亚年轻群体的消费趋势!
- npm EPERM: operation not permitted, rename解决
- python打印不换行_python打印后如何不换行
- 全球与中国连续光纤激光器市场现状及未来发展趋势
- 微信小程序开发与oss防盗链
热门文章
- 8 海康视觉平台VisionMaster 上手系列:典型案例之测量案例
- PetaLinux学习笔记 2
- Python JS代码压缩
- 区块链在你生活中上演的一出好戏「续集」……
- 5个前端练手项目(html css js canvas)
- python识别滑块验证码_干掉验证码!使用Python图像识别移动滑块验证码
- [Python图像识别] 五十.Keras构建AlexNet和CNN实现自定义数据集分类详解
- python导入模块方法_Python导入模块的3种方法(非常详细)
- 自制的C++抓鸭子游戏献给大家
- MATLAB解算坐标转换7参数