php ZipArchive 解壓亂碼問題


1、解決php ZipArchive 解壓亂碼問題
/**
* @param string $zipName 需要解壓的文件路徑加文件名
* @param string $dir 解壓后的文件夾路徑
* @return bool
*/
function extractZipToFile($zipName,$dir){
$zip = new \ZipArchive;
if ($zip->open($zipName) === TRUE) {
if(!is_dir($dir)) mkdir($dir,0775,true);
$docnum = $zip->numFiles;
for($i = 0; $i < $docnum; $i++) {
$statInfo = $zip->statIndex($i,\ZipArchive::FL_ENC_RAW);
$filename = $this->transcoding($statInfo['name']);
if($statInfo['crc'] == 0) {
//新建目錄
if(!is_dir($dir.'/'.substr($filename, 0,-1))) mkdir($dir.'/'.substr($filename, 0,-1),0775,true);
} else {
//拷貝文件
copy('zip://'.$zipName.'#'.$zip->getNameIndex($i), $dir.'/'.$filename);
}
}
$zip->close();
return true;
}else{
return false;
}
}

function transcoding($fileName){
$encoding = mb_detect_encoding($fileName,['UTF-8','GBK','BIG5','CP936']);
if (DIRECTORY_SEPARATOR == '/'){ //linux
$filename = iconv($encoding,'UTF-8',$fileName);
}else{ //win
$filename = iconv($encoding,'GBK',$fileName);
}
return $filename;
}



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM