大家好
最近遇到一個神奇的問題
假設我有一個壓縮檔案
裡面放一些中文檔名檔案
例如
澳洲麥片.pdf
澳大利亞麥片.pdf
直接使用預設的解壓縮方式
例如以下方式:
//原本解壓縮方式 $zip = new ZipArchive; $res = $zip->open($zipFile); if ($res === TRUE) { $zip->extractTo($dir); $zip->close(); }
就變成
D洲麥片.pdf
U大利亞麥片.pdf

類似這種情況
開頭文字消失且有亂碼
查看解出來的檔案也確實開頭已經是英文了...

所以我有找到另一種針對中文檔名的解壓縮方式:
//解壓縮到 TMP //打開ZIP $zip = zip_open($zipFile); //讀取ZIP while ($zip_entry = zip_read($zip)) { //取得ZIP內檔案名稱 $zfname = zip_entry_name($zip_entry); //打開ZIP內檔案資源 if (zip_entry_open($zip, $zip_entry)) { //讀取ZIP內檔案資源 記得要設定大小 zip_entry_filesize($zip_entry) $contents = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); //寫入檔案到轉換為 UTF8檔案名稱的檔案 用 mb_convert_encoding轉換 file_put_contents($dir.mb_convert_encoding($zfname, "utf-8", "big5"), $contents); //關閉ZIP內檔案資源 zip_entry_close($zip_entry); } } zip_close($zip);
這邊主要是使用 zip_read 方式
一個一個的處理檔案
如果遇到中文檔名
且 需要正確的保留中文檔名的時候
就需要這樣做了
給大家參考囉

留言板
歡迎留下建議與分享!希望一起交流!感恩!