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

php ziparchive中文亂碼怎麼辦

藏色散人
藏色散人原創
2021-05-28 09:31:052234瀏覽

php ziparchive中文亂碼的解決方法:先打開壓縮包將內部檔名及目錄進行轉碼;然後在轉碼後關閉壓縮包並重新打開解壓即可。

php ziparchive中文亂碼怎麼辦

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

解決php使用ZipArchive解壓縮時中文亂碼問題

使用php自帶的ZipArchive來解壓縮帶中文檔名壓縮包時會造成亂碼,現像如下:

原始結構:

## 

解壓縮程式碼:

$zip = new \ZipArchive();
$res = $zip->open('./钱学森班.zip');
if ($res !== true){    
throw new \Exception('打开压缩包失败');
}$zip->extractTo('./cache');
$zip->close();

 解壓縮後:

 

原因

預設windows,mac打壓縮套件時編碼為簡體中文,解壓縮時未作檔案轉換導致解壓縮結果與預期不符

解決方法

開啟壓縮包後先將內部檔名及目錄轉碼,轉碼後需關閉壓縮包並重新開啟解壓縮

實作如下:

$zipName = './钱学森班.zip';
$zip = new \ZipArchive();
$res = $zip->open($zipName);
if ($res !== true){
    throw new \Exception('打开压缩包失败');
}

// 加入此段↓
$fileNum = $zip->numFiles;
for ($i = 0; $i < $fileNum; $i++) {
    $statInfo = $zip->statIndex($i, ZipArchive::FL_ENC_RAW);
    $zip->renameIndex($i, iconv(&#39;GBK&#39;, &#39;utf-8//IGNORE&#39;, $statInfo[&#39;name&#39;]));
}
$zip->close();
$zip->open($zipName);
// 截至↑

$zip->extractTo($extractTo);
$zip->close();

注意事項

    #轉碼後因為修改了原壓縮套件文件,所以
  • 不可重複轉碼,若不想對原始檔案產生影響需先複製(php-zip擴充功能是自己讀取檔案流,不需要複製)
  • 轉換前使用mb_detect_encoding進行編碼判斷依然是返回UTF-8

推薦學習:《

PHP影片教學

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

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