
在实际项目中要用ZipArchive解压ZIP文件,起初測试环境在Win环境中,測试通过,换到 LINUX 的环境中时 就出问题了(ZIP包中有文件和目录,包含带汉字的文件名称)
问题的现象是:不带汉字的文件解压没有问题,另外有部分带汉字和数字字母的文件解压没有问题,然后其它纯文字的文件名称就丢失了,也没有报错,最后把问题定位到了extractTo()方法,这种方法是个封装的方法,看不到实际的源码。
经Google一番后,发现使用getNameIndex和numFiles可找到所有的文件,循环遍历使用copy方法进行中文转码
核心代码
for($i = 0; $i < $zip->numFiles; $i++) {
$filename = $zip->getNameIndex($i);
if(!is_dir($filename)){
//需要将目标地址转码
$to = iconv("gbk", "utf-8//IGNORE", $topath.$filename);
copy("zip://".$path."#".$filename, $to);
}else{
@mkdir($topath.'/'.$filename, 0777);
}
} 另一种方法使用unzip命令解压,解决中文解压乱码问题,命令如下:
export LC_ALL=zh_CN.UTF-8 && /usr/bin/unzip -o test.zip -d test 2>&1被搞了一天,能解决就是进步~
评论
暂无评论
评论(4)