2017-06-29 45 views
0

我嘗試創建zip歸檔與文件фыфыфы.cs接下來方式zip壓縮包:無法創建UTF8命名西里爾文件

$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,但它不適合我。 A得到空的$ encoded_filename。

+0

[獲取UTF-8文件名以使用PHP ZipArchive]可能的副本(https://stackoverflow.com/questions/22068536/getting-utf-8-filenames-to-work-with-php-ziparchive) –

回答

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

您可以實現您的代碼此方法。

+0

在$ encoded_filename = iconv(「UTF-8」,「Windows-1252 // IGNORE」,$ filename)之後;我在$ encoded_filename中獲得了空字符串,因此無法創建文件。 –