2013-07-22 99 views
2

在我的PHP應用程序我做了以下內容:PHP的文件創建zip文件與Unicode名稱

$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

ZIP文件沒有指定的文件名編碼*。因此,任何使用非ASCII字符都是不可靠的。

*:不完全正確:擴展名格式允許使用UTF-8文件名,並且zip命令將使用它。但Windows的ZIP接口(「壓縮文件夾」)不支持它,並且始終使用默認(「ANSI」)代碼頁來解釋文件名字節。如果您知道您的目標受衆都具有特定語言環境的Windows框,那麼您可以定位該語言環境......否則,最好堅持使用ASCII。