Я использую «Библиотеку PhpConcept — Zip Module 2.8.2» (http://www.phpconcept.net/pclzip/), также называется pclzip для создания zip-файла. Я использую XAMPP на Windows 8.1.
Я могу создать хороший zip-файл по содержанию. Однако file и 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.
Ну, я решил это сам, добавив функцию обратного вызова «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));
}
В Utf-8 должны быть все шведские персонажи. Iso8859-1 нет. Для этого вы можете использовать string utf8_decode ( string $data )
просто запуск с расшифровкой имени zipfile :).
вы могли бы использовать
$archiveNameDecoded = utf8_decode('archivename.zip');
$archive = new PclZip(archiveNameDecoded);