无法使用utf8命名的西里尔文件创建zip存档

时间:2017-06-29 14:02:50

标签: php windows ziparchive

我尝试使用文件фыфыфы.cs创建zip-archive下一步:

$zip = new ZipArchive;
if ($zip->open($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . '111.zip', ZIPARCHIVE::CREATE) === TRUE) {           
    $zip->addFile($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . 'фыфыфы.cs');
    $zip->close();
    echo 'ok';
} else {
    echo 'error';
}

但是没有创建存档。我尝试在addFile调用后查看存档中的文件数:

die($zip->numFiles);

但我得到了0。

当我将文件重命名为zzz.cs时,存档已成功创建。怎么了?

我在电脑上使用Windows 8。

我试过了this solution,但它对我不起作用。得到了空的$ encoded_filename。

1 个答案:

答案 0 :(得分:0)

为了解决此问题,我必须再次将$ filename编码为不同的编码CP858。

示例:

$filename = "фыфыфы.cs";

//encode to windows-1252 to save to the filesystem
$encoded_filename = iconv("UTF-8","Windows-1252//IGNORE",$filename);
file_put_contents($encoded_filename, "text");

//put in a zip file
$zip = new ZipArchive();
$zip->open('test.zip', ZIPARCHIVE::CREATE);
//encode as CP858 to save into zip file
$zip->addFile($encoded_filename, iconv("UTF-8", "CP858//IGNORE", $filename));
$zip->close();

您可以为您的代码实现此方法。