解決 ownCloud 用 zip 檔打包下載時,中文檔名會出現亂碼

使用 ownCloud 上傳及下載中文檔名的檔案,都沒有問題,但如果要用 zip 檔打包下載時,中文檔案或目錄,都會出現亂碼。
中文目錄沒有問題

中文檔名也沒有問題

[@more@]但使用 zip 檔打包下載整個目錄時,會出現亂碼

使用 7zip 解壓縮時,中文目錄出現亂碼

中文檔名也會出現亂碼

在網路搜尋了一下,找到了解決的方法:工作雜記: Owncloud中文目錄包裹下載

切換目錄
# cd /var/www/html/owncloud/lib/private
備份原檔
# cp files.php files.php.`date +%F`

修改 files.php
紅色 的部分是修改的部分
# vim files.php
 foreach ($files as $file) {
                                $file = $dir . ‘/’ . $file;
                                if (OCFilesFilesystem::is_file($file)) {
                                        $tmpFile = OCFilesFilesystem::toTmpFile($file);
                                        self::$tmpFiles[] = $tmpFile;
                                        $u8filename=iconv(“UTF-8”, “Big-5”, basename($file));   //for utf-8
//                                      $zip->addFile($tmpFile, basename($file));
                                        $zip->addFile($tmpFile,$u8filename);
                                } elseif (OCFilesFilesystem::is_dir($file)) {
                                        self::zipAddDir($file, $zip);
                                }
                        }

        public static function zipAddDir($dir, $zip, $internalDir=”) {
                $dirname=basename($dir);
                $dirname=iconv(“UTF-8”, “Big-5”, $dirname); // for utf-8
                $zip->addEmptyDir($internalDir.$dirname);
                $internalDir.=$dirname.=’/’;
                $files=OC_Files::getDirectoryContent($dir);
                foreach($files as $file) {
                        $filename=$file[‘name’];
                        $file=$dir.’/’.$filename;
                        if(OCFilesFilesystem::is_file($file)) {
                                $tmpFile=OCFilesFilesystem::toTmpFile($file);
                                OC_Files::$tmpFiles[]=$tmpFile;
                                $filename=iconv(“UTF-8”, “Big-5”, $filename); // for utf-8
                                $zip->addFile($tmpFile, $internalDir.$filename);
                        }elseif(OCFilesFilesystem::is_dir($file)) {
                                self::zipAddDir($file, $zip, $internalDir);
                        }
                }
        }

中文目錄正常顯示

中文檔名正常顯示