瑞典字符(ÅÄÖ)在PclZip zip文件中搞砸了

时间:2015-10-09 13:35:54

标签: php character-encoding zip pclzip

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

我能够以内容方式创建一个好的zip文件。但是,带有瑞典字符(åäö)的文件和foldernames会在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。

2 个答案:

答案 0 :(得分: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));
}

答案 1 :(得分:0)

Utf-8应该拥有所有的瑞典字符。 iso8859-1 doesen&#t; t。因此,您可以使用string utf8_decode ( string $data )启动解码zipfile名称:)。

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