在zip php中写入unicode文件名(linux服务器)

在zip php中写入unicode文件名(linux服务器),php,linux,unicode,utf-8,zip,Php,Linux,Unicode,Utf 8,Zip,我使用ZipArchive压缩所有照片。原始照片的文件名具有unicode字符。将所有照片压缩为zip文件后,照片的文件名将更改为另一个字符 例如,照片的原始文件名是”កែវ កេត_1429672475273.jpg“,它将是zip文件中的“СЮАССЮСЮЮАЯБСЮП_1429672475273.jpg” 这是我的简单代码: $zip = new ZipArchive(); $filename = 'photos.zip'; if ($zip->open($filename, Zip

我使用
ZipArchive
压缩所有照片。原始照片的文件名具有unicode字符。将所有照片压缩为zip文件后,照片的文件名将更改为另一个字符

例如,照片的原始文件名是
”កែវ កេត_1429672475273.jpg“
,它将是zip文件中的
“СЮАССЮСЮЮАЯБСЮП_1429672475273.jpg”

这是我的简单代码:

$zip = new ZipArchive();
$filename = 'photos.zip';
if ($zip->open($filename, ZipArchive::OVERWRITE) !== TRUE) {
    exit("Cannot open <$filename>");
}
$teachers = array(
    'កែវ កេត_1429672475273.jpg',
    'ផាន់ ចាន់រស្មី_1429671047820.jpg',
    'ម៉ៅ ហៀង_1427422340782.jpg',
);
foreach ($teachers as $teacherFileName) {
    if (file_exists($teacherFileName) && is_file($teacherFileName)) {
        $zip->addFile($teacherFileName, 'teachers/' . $teacherFileName);
    }
}

$zip->addFromString('version.txt', date('YmdHis'));
$zip->close();
$zip=new ZipArchive();
$filename='photos.zip';
如果($zip->open($filename,ZipArchive::OVERWRITE)!==TRUE){
退出(“无法打开”);
}
$teachers=数组(
'កែវ កេត_1429672475273.jpg',
'ផាន់ ចាន់រស្មី_1429671047820.jpg',
'ម៉ៅ ហៀង_1427422340782.jpg',
);
foreach($teachers as$teacherFileName){
如果(文件_存在($teacherFileName)&&is_文件($teacherFileName)){
$zip->addFile($teacherFileName,'teachers/'。$teacherFileName);
}
}
$zip->addFromString('version.txt',date('YmdHis');
$zip->close();
这些是带有Unicode的文件:

文件名与原始文件的unicode字符不同:

我目前的服务器是Ubuntu 14.10 64位(本地机器)和Gentoo 64位(真实服务器)。结果是一样的


提前谢谢

我在你的文章中找不到任何问题,但我仍会尽力帮助你解释为什么会这样

zip
格式将文件名存储为字节序列

如何解释名称取决于zip处理工具,即在您的情况下
nautilus