300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 如何解决php压缩中文文件名乱码问题

如何解决php压缩中文文件名乱码问题

时间:2018-10-02 04:48:38

相关推荐

如何解决php压缩中文文件名乱码问题

后端开发|PHP问题

php

后端开发-PHP问题

户籍管理软件源码,ubuntu 更换跟新源,tomcat9卸载失败,python爬虫美图,redis和php,广州市新闻发布seo推广费用lzw

本文操作环境:Windows10系统、PHP7.1版,DELL G3电脑

淘宝软件源码,ubuntu 保存终端内容,爬虫技术股,php fcpath,seo8866lzw

PHP解压ZIP压缩包,解决中文乱码问题

婚纱网站html源码,vscode外观重置,ubuntu双ip配置路由表,gae与Tomcat,sqlite常用c接口,discuz 股票插件,简单易用的web前端框架,黑底红条的爬虫,apache php编译,艾默生seo查询,网站整套模板,ecshop写网页 教程视频教程,软件发布模板,pb 应用程序名称lzw

修复原生ZipArchive的中文乱码问题

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

open($zipfile);$toDir = "./test";$s = $zip->extractTo($toDir);print_r(scandir($toDir));//作者:Dorm_Script//链接:/p/3efa924fd809

参考一篇blog,原作的解决办法是:

open($zipfile);$toDir = "./test";if(!file_exists($toDir)) { mkdir($toDir);}$docnum = $zip->numFiles;for($i = 0; $i statIndex($i); if($statInfo[crc] == 0) { //新建目录 mkdir($toDir./.substr($statInfo[ ame], 0,-1)); } else { //拷贝文件 copy(zip://.$zipfile.#.$statInfo[ ame], $toDir./.$statInfo[ ame]); }}print_r(scandir($toDir));//作者:Dorm_Script//链接:/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 statIndex($i);if($statInfo[crc] == 0) { //新建目录 mkdir(iconv ( UTF-8, GB2312, $toDir./.$statInfo[ ame]), 0777, true);} else { //拷贝文件,特别的改动,iconv的位置决定copy能不能work if(copy(zip://.iconv ( UTF-8, GB2312, $zipName).#.$statInfo[ ame], iconv ( UTF-8, GB2312, $toDir./.$statInfo[ ame])) == 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视频教学》

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。