简体   繁体   中英

Can't create a zip archive with utf8-named cyrillic file

I try to create zip-archive with file фыфыфы.cs next way:

$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';
}

But the archive wasn't created. I tried to view the number of files in the archive after addFile call with:

die($zip->numFiles);

But I got 0.

When I renamed file to zzz.cs, the archive was created successfully. What's wrong?

I use Windows 8 at my PC.

I tried this solution , but it didn't work for me. A got the empty $encoded_filename.

for fix this I had to encode the $filename yet again to a different encoding, CP858.

Example:

$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();

You can implement this method for your code.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM