瑞典字符 (ÅÄÖ) 在 PclZip zip 文件中变得混乱

Swedish characters (ÅÄÖ) gets messed up in PclZip zip files

我正在使用 "PhpConcept Library - Zip Module 2.8.2" (http://www.phpconcept.net/pclzip/),也称为 pclzip 来创建一个 zip 文件。我 运行 XAMPP Windows 8.1.

我能够创建内容不错的 zip 文件。但是,带有瑞典字符 (åäö) 的文件和文件夹名称在 zip 文件中变得混乱。

用法(压缩文件夹):

require_once('pclzip.lib.php');
$archive = new PclZip('archive.zip');
if ($archive->add('filestobezipped/') == 0) {
    die('Error : '.$archive->errorInfo(true));
}

我猜是有些字符编码问题。但这应该如何解决呢? PclZip 库用户指南很难理解。 zip 格式使用 CP437 和 UTF-8。我的 php 使用的是 ISO8859-1。

Utf-8 应该包含所有瑞典语字符。 iso 8859-1 没有。因此,您可以使用 string utf8_decode ( string $data ) 来解码 zip 文件名:)。

你可以使用 $archiveNameDecoded = utf8_decode('archivename.zip'); $archive = new PclZip(archiveNameDecoded);

嗯,我自己解决了这个问题,方法是添加一个回调函数 "myPreAddCallBack",当每个文件被添加到存档时该函数就会运行。它将文件名转换为 CP437。 PCLZIP_CB_PRE_ADD 参数的文档:http://www.phpconcept.net/pclzip/user-guide/50

require_once('pclzip.lib.php');

function myPreAddCallBack($p_event, &$p_header)
{
    $encoding = mb_detect_encoding($p_header['stored_filename']);
    $p_header['stored_filename'] = iconv($encoding,"CP437",$p_header['stored_filename']);
    return 1;
}

$archive = new PclZip('archive.zip');
if ($archive->add('filestobezipped/',PCLZIP_CB_PRE_ADD, 'myPreAddCallBack') == 0) {
    die('Error : '.$archive->errorInfo(true));
}