瑞典字符 (ÅÄÖ) 在 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));
}
我正在使用 "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));
}