»»»美仑©本站聚集品质模板、JS特效、源码、模块、原创等丰富资源下载。
首页 教程 网站制作教程 关于PHP压缩,查看目录,中文乱码那些事

关于PHP压缩,查看目录,中文乱码那些事

2019-01-15 01:55:56| 责任编辑: 小美| 查看: | 评论: 0| 百度已收录
摘要: 今天农成在加班写一个关于学校的管理系统的时候呢,就遇到了几个比较蛋疼的问题。1、使用PHPword生成word文档的时候呢,就遇到了

今天农成在加班写一个关于学校的管理系统的时候呢,就遇到了几个比较蛋疼的问题。

1、使用PHPword生成word文档的时候呢,就遇到了中文文件名字生成的问题。

解决办法:

  1. $name = iconv('utf-8''GB2312//IGNORE'$teacher['name']).'.doc'
  2. $document->save($save_path.'/'.$name); 

完美解决。

2、使用PHPzip生成压缩文件的时候,发现压缩不进刚刚生成的中文命名的文档。

打断点跟进了一下这个问题。发现产生的原因有以下几个:

a、使用递归函数遍历文件夹下面的文件的时候,出现了文件漏掉的情况。代码如下:

  1. //获取文件列表 
  2. private function list_dir($dir){ 
  3.     $result = array(); 
  4.     if (is_dir($dir)){ 
  5.         $file_dir = scandir($dir); 
  6.         foreach($file_dir as $file){ 
  7.             $file =  iconv('gbk''utf-8'$file) ;//这里就是产生漏掉的原因。 
  8.             if ($file == '.' || $file == '..'){ 
  9.                 continue
  10.             } 
  11.             elseif (is_dir($dir.$file)){ 
  12.                 $result = array_merge($result$this->list_dir($dir.$file.'/')); 
  13.             } 
  14.             else
  15.                 array_push($result$dir.$file); 
  16.             } 
  17.         } 
  18.     } 
  19.     return $result

b、在使用$zip = new ZipArchive;进行压缩的时候,发现中文名字的文件根本就压缩不进去。于是借助了万能的百度和谷歌,通过查看zip的文档。文档地址。发现了以下的问题:

  1. 如果文件名包含汉字,ZIPARCHIVE::addFile() 会导致无法将文件压缩到压缩包中,或者压缩以后文件名乱码。 
  2.  
  3. 可以使用ZipArchive::addFromString()来实现。 
  4.  
  5. 注意:如果操作系统是Windows,文件系统编码是gbk. 
  6. 如果php文件的文件编码是utf-8,需要相应转码。 
  7.  
  8. ZipArchive::addFile() fails if the filename contains Chinese characters. 
  9.  
  10. ZipArchive::addFromString() should be used instead. 
  11.  
  12. <?php 
  13.  
  14.     $z = new ZipArchive; 
  15.  
  16.     $file = '中文.txt'
  17.  
  18.     if($z->open(ZIPARCHIVE::CREATE)===true){ 
  19.         $z->addFromString($filefile_get_contents($file)); 
  20.         //for windows 
  21.         //$z->addFromString($file, file_get_contents(iconv('utf-8', 'gbk//ignore', $file))); 
  22.     } 
  23.     // ... 

然后就使用以下代码:

  1. //重新生成文件 
  2.      $zip = new ZipArchive();//使用本类,linux需开启zlib,windows需取消php_zip.dll前的注释 
  3.      if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) { 
  4.          exit('无法打开文件,或者文件创建失败'); 
  5.      } 
  6.      foreach($datalist as $val){ 
  7.          if(file_exists(iconv('UTF-8','GB2312'$val))){ 
  8.                $zip->addFile( $valbasename($val));//非中文使用这个 
  9.            $zip->addFromString(iconv('UTF-8','GB2312'$this->get_basename($val)), file_get_contents(iconv('utf-8''gbk//ignore'$val)));//中文使用这个 
  10.          } 
  11.      } 
  12.      $zip->close();//关闭 

完成了整个从生成word到压缩下载的曲折过程。

相关热词搜索:乱码 中文 压缩 那些 目录

延伸阅读

精彩阅读
会员登录
广告位

关注我们:美仑视觉

官方QQ群

微信平台

全国服务热线:

0769-33232320

【版权声明】本站内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件至Email:admin@meil88.com 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

Copyright   ©2013-2018  美仑视觉  Powered by©Meil88!  公安备案:粤ICP备15022042号