2

我正在使用“PhpConcept 库 - Zip 模块 2.8.2”(http://www.phpconcept.net/pclzip/),也称为 pclzip 来创建 zip 文件。我在 Windows 8.1 上运行 XAMPP。

我能够创建一个好的 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。

4

2 回答 2

1

好吧,我自己解决了这个问题,方法是添加一个回调函数“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));
}
于 2018-04-10T14:05:51.320 回答
0

utf-8 应该包含所有瑞典语字符。iso8859-1 没有。因此,您可以使用string utf8_decode ( string $data )仅启动来解码 zipfile 名称:)。

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

于 2018-04-09T16:05:02.597 回答