Шведские символы (ÅÄÖ) запутались в zcl-файлах PclZip

Я использую "Библиотеку 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.

2 ответа

Решение

Ну, я решил это сам, добавив функцию обратного вызова "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);

Другие вопросы по тегам