發表文章

目前顯示的是 7月, 2011的文章

PCLZIP 壓縮中文檔名

最近幫人寫的一個網站需要壓縮 zip 檔,使用的是 pclzip 這個套件,只需要簡單幾個指令就能壓縮/解壓縮 zip 檔,是很不錯的方案。因為網站編碼是 UTF-8(這個時代誰還在用 Big5 的...),所以存下來的檔名很自然也是以 UTF-8 編碼。在處理的過程中發現,在壓縮帶中文檔名的檔案時,UTF-8 編碼的檔名/目錄名無法在 Windows 下正常解壓。不確定是 pclzip 或是 windows 方面的問題。總之解決方案就是,在壓縮的過程中把 UTF-8 轉成 Big5 編碼。 幸好 pclzip 有提供 變更檔案名稱的方法 (News,連結可能會變動)。在 User Guide 裡沒有寫出來,所以花了點時間才找到。我大約的寫法是像這樣: // 設定解壓後的中文目錄名稱 $big5DirName = iconv('UTF-8', 'Big5', '中文目錄名/'); // 將要下載的檔案轉換為 big5 foreach( $queue as $utf8filename ) {   if( file_exists($file_hosting_dir.$utf8filename) ) {   $zipFiles[] = array(     PCLZIP_ATT_FILE_NAME => $file_hosting_dir.$utf8filename,// 本地檔案路徑     PCLZIP_ATT_FILE_NEW_FULL_NAME => $big5DirName.iconv('UTF-8', 'Big5', $utf8filename) );// 壓縮檔內路徑+全名   } } // 如果沒資料就停止下載 if( !tep_not_null($zipFiles) ) {     echo '無可下載檔案。';     exit; } // 建立 pclzip 物件, 並壓縮所有檔案 $archive = new PclZip($zip_tmp_file_path_name); $v_list = ''; $v_list = $archive->create($downl