php ZipArchive chinese中文乱码解决,由于windows使用的gbk编码,导致在服务器上解压出来取得的文件名是乱码$real_zip_file = './test.zip';
$zip = new \ZipArchive();
if ($zip->open($real_zip_file) !== true) {
throw new Exception('zip file not exists.');
}
$encodes = ['UTF-8','GBK','BIG5','CP936'];
$filenames = [];
for ($i = 0; $i numFiles; $i++){
$filename = $zip->statIndex($i,\ZipArchive::FL_ENC_RAW);
if ($filename['crc'] == 0) {
continue;
}
//$filename = $zip->statIndex($i);
$encoding = mb_detect_encoding($filename['name'],$encodes);
if($encoding != 'UTF-8'){
$filenames[] = iconv($encoding,'utf-8//IGNORE',$filename['name']);
}else{
$filenames[] = $filename['name'];
}
break;
}
print_r($filenames);
exit;
重点是ZipArchive::FL_ENC_RAW (integer)
Get unmodified string. Available as of PHP 7.0.8.
获取原始未修改的字符串,此参数只适用于php 7.0.8以上版本