PHP - 在Linux上使用ZipArchive将文件添加到zip文件时出现编码错误

时间:2015-04-16 17:58:28

标签: php linux ubuntu encoding ziparchive

当文件名包含“áéãô”等特殊字符时,我在将文件添加到zip时遇到了问题。代码非常简单,一切正常。这是:

$newZip = new ZipArchive();
$newFile = DIR."/".$repo_name.".zip";
$open_newZip = $newZip->open($newFile, ZIPARCHIVE::CREATE);

        if($open_newZip === TRUE){

            sort($arquivos);    

            foreach( $arquivos as $arquivo ){
                //I tried this but it doesn't make any difference at all
                header('Content-Type: text/html; charset=utf-8'); 

                $newZip_baseName = pathinfo($arquivo, PATHINFO_BASENAME);
                $newZip->addFile($arquivo,  $newZip_baseName);
        } else {
            echo 'Error openning the new file. Error: '. $open;
        }

例如:文件为“1NandõReis - N.mp3”,在zip文件中显示为“1Nand├╡Reis - N.mp3”。 unziped(这是正确的?哈哈哈)文件仍然是“1Nand├╡Reis - N.mp3”。

我试过这个:Getting UTF-8 filenames to work with PHP ZipArchive(这给了我一个不同的结果 - 文件保存为“1NandїReis - N.mp3” - 但不能解决我的问题)

而且:http://grokbase.com/t/php/php-bugs/1127mqqbd8/php-bug-bug-53948-new-zip-archive-utf-8-filenames-problem

官方错误报告:https://bugs.php.net/bug.php?id=53948

上面的大部分链接都表明了这一点:PHP ZipArchive non-English filenames return funky filenames within archive我也试过没有任何成功。我担心所有这些解决方案仅适用于Windows。有人有Linux的解决方法吗?

1 个答案:

答案 0 :(得分:0)

通常«在我的计算机上我可以保存一个具有该名称的文件,所以这是你的错误»综合症。从来没有见过Justin Bieber的MP3,文件名中有很多♥“只是因为它可能”?

对于Linux,我发现命令 convmv 听起来很有希望 - 请参阅http://linux.die.net/man/1/convmv

我认为你也可以从PHP exec()开始。