您好,登錄后才能下訂單哦!
小編給大家分享一下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('GBK', 'utf-8//IGNORE', $statInfo['name'])); } $zip->close(); $zip->open($zipName); // 截至↑ $zip->extractTo($extractTo); $zip->close();
轉碼后因為修改了原壓縮包文件,所以不可重復轉碼,若不想對原文件產生影響需先復制(php-zip擴展是自己讀文件流,不需要復制)
轉換前使用mb_detect_encoding進行編碼判斷依然是返回UTF-8
看完了這篇文章,相信你對“php ziparchive中文亂碼的解決方法”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。