PHP使用ZipArchive解压时GBK编码目录中文乱码问题的解决办法

软件 › 编程语言 › PHP 售价:0鸟蛋 浏览:58 时间:星期前
ZIP解压乱码GBKZipArchive

使用php自带的ZipArchive来解压带中文文件名压缩包时会造成乱码,例如:

WX20241202-154039@2x.png

原因:

默认windows,mac打压缩包时编码为简体中文,解压时未作文件转化导致解压结果与预期不符。

解决办法:

打开压缩包后先将内部文件名及目录进行转码,转码后需关闭压缩包并重新打开解压。

原解压代码:

$zip = new \ZipArchive();
$res = $zip->open('./file.zip');

if ($res !== true){
    throw new \Exception('打开压缩包失败');
}

$zip->extractTo('./cache');
$zip->close();

调整后的代码:

$zipName = './file.zip';
$zip = new \ZipArchive();
$res = $zip->open($zipName);

if ($res !== true){
    throw new \Exception('打开压缩包失败');
}

//解决GBK中文乱码的关键地方
$fileNum = $zip->numFiles;

for ($i = 0; $i < $fileNum; $i++) {
    $statInfo = $zip->statIndex($i, ZipArchive::FL_ENC_RAW);
    $zip->renameIndex($i, iconv('GBK', 'utf-8//IGNORE', $statInfo['name']));
}

$zip->close();
$zip->open($zipName);

$zip->extractTo($extractTo);
$zip->close();


提问 收藏 举报 2 0
评论(0)
评论
  • 还没有评论,发表第一个评论吧

0 0 1 9 2
提问 回答 资料 博客 粉丝
近期阅读