【问题标题】:Write unicode file name in zip php (linux server)在 zip php 中写入 unicode 文件名(linux 服务器)
【发布时间】:2015-04-24 08:46:42
【问题描述】:

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

例如照片的原始文件名是"កែវ កេត_1429672475273.jpg",在压缩文件中它将是"сЮАсЯВсЮЬ сЮАсЯБсЮП_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();

这些是带有 unicode 的文件:

文件名不是原文件的unicode字符:

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

提前致谢!

【问题讨论】:

    标签: php linux unicode utf-8 zip


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多