php解壓縮zip亂碼的解決方法:先開啟對應的PHP檔;然後用PHP的zip封裝協定解壓縮去解決ZipArchive亂碼即可。
本文操作環境:windows7系統、PHP7.1版,DELL G3電腦
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中文網其他相關文章!