首頁  >  文章  >  後端開發  >  php zip中文亂碼怎麼辦

php zip中文亂碼怎麼辦

藏色散人
藏色散人原創
2021-09-15 11:25:192937瀏覽

php zip中文亂碼的解決方法:1、開啟對應的PHP程式碼檔案;2、用PHP的zip封裝協定解壓縮去解決ZipArchive亂碼問題即可。

php zip中文亂碼怎麼辦

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

php zip中文亂碼怎麼辦?

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['crc'] == 0) {
       //新建目录
       mkdir($toDir.'/'.substr($statInfo['name'], 0,-1));
   } else {
       //拷贝文件
       copy('zip://'.$zipfile.'#'.$statInfo['name'], $toDir.'/'.$statInfo['name']);
   }
}

print_r(scandir($toDir));

推薦學習:《PHP影片教學

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn