share» 博客 » 用PHP如何检测一个ZIP包内的文件是在何种编码的系统下创建的

用PHP如何检测一个ZIP包内的文件是在何种编码的系统下创建的

发表于 ror 访问量 260

事情起源于在WIN下创建的zip放到linux下解压时,中文路径和文件名会出现乱码,于是动手写了个脚本转换zip内文件名的代码。但是,如果是在日语、韩语或者繁体字WIN系统下建立的zip,由于不知道原始编码格式,导致无法转码。
怎么解。。。

<?php
/* well ... prepare our zip file ... */
$zip = new ZipArchive;
$res = $zip->open( '/path/to/your.zip' );

/* can not open ..? are you kidding me ..? */
if ( true !== $res )
    throw new Exception( 'Can Not Open Zip File / ' . $res );

/* default value of file encoding ... */
$encoding = 'EMTPY';

/* controller ... change this if mb_detect_encoding return wrong answer ... */
$controller = null;

/* get file list ... */
for ( $i = 0; $i < $zip->numFiles; ++ $i ) {

    /* get file encoding ... */
    $encoding = mb_detect_encoding( $zip->getNameIndex( $i ), $controller );

    /* we do not need english named files ... */
    if ( 'ASCII' !== $encoding ) break;

}

/* clean table ... */
$zip->close();

/* simply output ... */
echo $encoding;


此条目发表在 技术 分类目录,将 用PHP如何检测一个ZIP包内的文件是在何种编码的系统下创建的 加入收藏夹。