【问题标题】:PHP - Encoding error on add file to a zip with ZipArchive on LinuxPHP - 在 Linux 上使用 ZipArchive 将文件添加到 zip 时出现编码错误
【发布时间】:2015-04-16 17:58:27
【问题描述】:

当文件名包含“áéãô”等特殊字符时,我在将文件添加到 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”。解压后(对吗?哈哈哈)文件还是“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 的解决方法吗?

【问题讨论】:

    标签: php linux ubuntu encoding ziparchive


    【解决方案1】:

    这是常见的“在我的电脑上我可以用那个名字保存一个文件,所以这是你的错”综合症。从未见过 Justin Bieber 的 MP3 的文件名中带有很多 ♥ “仅仅因为它是可能的”?

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

    我想你也可以从 PHP 中exec() 它。

    【讨论】:

    • 谢谢!这不是确切的答案,但是当您给我解决问题的方法时,我将其标记为已接受。我没有使用 ZipArchive,而是使用 exec(zip -r -j directory filename.zip) -r 进行递归,使用 -j 来避开原始路径并将文件保存在 zip 的根目录中……它就像一个魅力!只是为了确定:这个 exec() 函数是否会导致任何服务器漏洞?
    • IIRC 可以将可执行程序“沙箱化”,但我不记得具体如何。当然不能执行 /usr/bin 中的所有内容!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    相关资源
    最近更新 更多