$zipName = 'xxx.zip' ;
// 打开 zip 文件并获取文件结构
$zip = new ZipArchive();
$zip->open($zipName);
// 初始化文件树结构
$tree = [];
for ($i = 0; $i < $zip->numFiles; $i++) {
// 获取文件名,使用ZipArchive类提供的方法解决编码问题
$filename = $zip->getNameIndex($i, ZipArchive::FL_ENC_RAW);
// 转换编码为UTF-8
$filename = iconv('CP936', 'UTF-8', $filename);
// 分割路径为数组
$path = explode('/', $filename);
$node = &$tree;
foreach ($path as $dir) {
if (!isset($node[$dir])) {
$node[$dir] = [];
}
$node = &$node[$dir];
}
}
通过iconv 进行转换编码