我正在使用“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。
答案 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);