php为具有unicode名称的文件创建zip文件

时间:2013-07-22 06:23:41

标签: php unicode zip

在我的php应用程序中,我执行了以下操作:

$dn = sys_get_temp_dir() . '/' . uniqid('td', false);
if (mkdir($dn) === true)
{
    $fn = $dn . '/' . '関連事業調査.xls';
    $writer = new \PHPExcel_Writer_Excel5($wb);
    $writer->save($fn);

    $fzip = sys_get_temp_dir() . '/' . uniqid('td', false) . '.zip';
    $password = $this->container->getParameter('ZipPassword');
    $out = null; 
    $ret = null;
    exec("zip -qjP $password $fzip $dn" . '/*', &$out, &$ret);
}

在linux环境中,它使用给定的密码正确创建zip文件。我可以在Linux中解压缩文件而不会有任何问题。但是,如果我将其下载到Windows,并提取文件,文件名将变得不正确。如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

ZIP文件没有指定的文件名*编码。因此,任何非ASCII字符的使用都是完全不可靠的。

*:不完全正确:格式的扩展允许使用UTF-8文件名,zip命令将使用它。但Windows的ZIP接口(“压缩文件夹”)不支持它,并始终使用默认(“ANSI”)代码页来解释文件名字节。如果您知道目标受众都拥有具有特定区域设置的Windows框,那么您可以定位该区域设置...否则,最好坚持使用ASCII。