php 解壓縮zip 亂碼怎麼辦

藏色散人
發布: 2023-03-08 20:06:01
原創
2852 人瀏覽過

php解壓縮zip亂碼的解決方法:先開啟對應的PHP檔;然後用PHP的zip封裝協定解壓縮去解決ZipArchive亂碼即可。

php 解壓縮zip 亂碼怎麼辦

本文操作環境:windows7系統、PHP7.1版,DELL G3電腦

php解壓縮zip檔案亂碼問題

官方的操作方法:

<?php
$zip = new \ZipArchive;
$zipfile = "./test.zip";
$res = $zip->open($zipfile);
$toDir = "./test";
$s = $zip->extractTo($toDir);
print_r(scandir($toDir));
登入後複製

存在的問題

如果zip是在windows平台壓縮的,那麼在linux伺服器執行以上程式碼將會出現亂碼,同時解壓縮出來的檔案也會缺少

解決方案

問題分析:

ZipArchive亂碼,是因為編碼不一致導致的,Windows的檔案系統是gbk編碼的,而PHP ZipArchive中的檔名是UTF-8編碼的。 Zip壓縮包中如果檔案名稱包含中文等特殊字符,用PHP ZipArchive解壓縮亂碼是必然的事。 ZipArchive壓縮文件出現亂碼或無法將文件壓縮進去,也是相同的道理

解決思路

不要用自帶的ZipArchive::extractTo()方法去解壓縮ZipArchive文檔,改用PHP的zip封裝協定解壓縮去解決ZipArchive亂碼。

解決程式碼

<?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[&#39;crc&#39;] == 0) {
       //新建目录
       mkdir($toDir.&#39;/&#39;.substr($statInfo[&#39;name&#39;], 0,-1));
   } else {
       //拷贝文件
       copy(&#39;zip://&#39;.$zipfile.&#39;#&#39;.$statInfo[&#39;name&#39;], $toDir.&#39;/&#39;.$statInfo[&#39;name&#39;]);
   }
}
print_r(scandir($toDir));
登入後複製

推薦學習:《PHP影片教學

以上是php 解壓縮zip 亂碼怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
php
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板