我通过php脚本使用UTF-8编码创建一些.txt文件(带有希腊字符)。 当我尝试从ftp下载并读取这些文件时,一切正常(没有编码问题)。
当我将这些文件压缩到zip存档时,我面临所有希腊字符和newLines字符的编码问题。
zip脚本:
$zip = new ZipArchive();
$filename = "my_zip.zip";
if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) {
exit("cannot open <$filename>\n");
}
$files = glob('users/'.$_SESSION['s_uid'].'/*'); // get all file names
foreach($files as $file){ // iterate files
if(is_file($file))
//$zip->addFile($thisdir . $file, basename($file));
$zip->addFile($thisdir . $file, iconv("UTF-8","UTF-8", basename($file)));
//echo $file; // delete file
}
$zip->close();
答案 0 :(得分:0)
这似乎是PHP无法处理UTF-8编码文件名的一个未解决的错误。
此处也有类似的问题。
Problem when zipping files with special characters in PHP+Apache - encoding issue
答案 1 :(得分:0)
我还遇到了使用UTF8字符提取ZIP档案的问题。我无法找到任何真正解决这个问题的方法(我认为PECL中的问题仍然存在,因为我正在使用5.6)https://bugs.php.net/bug.php?id=53948
...所以我提出了一个解决方法,涉及在提取存档文件之前重命名存档文件。通过这种解决方法,我仍然可以允许用户在其存档中上传UTF8文件名,但我只需用正则表达式替换特殊字符。
$zip = new ZipArchive;
if ($zip->open($file_path) === true) {
for ($i = 0; $i < $zip->numFiles; $i++) {
$fname = $zip->getNameIndex($i);
$fname_new = // your str replacemenet code...
$zip->renameIndex($i, $fname_new);