当前位置:首页>技术笔记 >php >

解决windows服务器PclZip解压ZIP压缩包中文乱码问题

解决windows服务器PclZip解压ZIP压缩包中文乱码问题。在php中使用Pclzip类时出现无法压缩/解压文件的现象,追踪错误信息发现无法打开文件/文件夹。可是文件夹权限正确,打印文件路径之后发现是乱码。

解决windows服务器PclZip解压ZIP压缩包中文乱码问题

在php中使用Pclzip类时出现无法压缩/解压文件的现象,追踪错误信息发现无法打开文件/文件夹。可是文件夹权限正确,打印文件路径之后发现是乱码。

出现这个问题的解决办法是windows下zip内的文件名称编码是 gb2312,而php使用的是 utf-8 编码。

解决 PclZip 中文乱码问题有两个解决办法: 

第一,不使用中文文件名;

第二,对文件名进行编码转换,然后mb_substr就不会出现乱码了。

第一种方法显然不太现实,实际运用中无法避免。所以直接出第二种方案,下面是我写的一个方法:

function getZipGbk($file) {
    $arr = explode(",", $file);
    foreach ($arr as $v) {
        $names[] = iconv('UTF-8', 'GB2312', $v);
    }
    return implode(",", $names);
}
$files = getZipGbk($filepath.$filename);//压缩文件路径
$res=replacePathExtract($files,$filepath);//执行解压

网上还有一种方法是直接修改解决 PclZip 中文乱码问题

压缩文件部分改动privAddFile 方法中的:

//$p_header['stored_filename'] = $p_filedescr['stored_filename'];
// 改动为以下一行
$p_header['stored_filename'] = mb_convert_encoding( $p_filedescr['stored_filename'],'GB2312','UTF-8');

解压文件部分改动privExtractFile 方法中的:

$p_entry['filename'] = $p_path."/".$p_entry['filename'];
// 增加以下一行
$p_entry['filename'] = mb_convert_encoding($p_entry['filename'], 'UTF-8', 'gb2312');

已上方法经过测试都能解决windows服务器PclZip解压ZIP压缩包中文乱码问题。

 

上一篇: php保留两位小数,不足位数以0填充的方法

下一篇: 没有了