Допустим, нам нужно извлечь из zip архива файлы с именами на русском. А он извлекает крокозябры. Вот что сработало в итоге для меня:
$zip = new ZipArchive;
$res = $zip->open(*путь к папке, в которую загружен архив*);
if ($res === TRUE) {
$docs_path = *путь к папке, в которую надо распаковать архив*;
if(!is_file($docs_path)) mkdir($docs_path); // создаём, если не существует
$count = $zip->numFiles;
for($i = 0; $i < $count; $i++) {
$stat = $zip->statIndex($i);
$newname = mb_convert_encoding ($stat['name'], 'UTF-8','CP866' );
$newname = $this->makeAlias($newname, 1); // makeAlias - функция для перевода в транслит. Highly recommended, не используйте кириллические имена
$zip->renameIndex($i,$newname);
$res = $zip->extractTo($docs_path, array($zip->getNameIndex($i)));
}
$zip->close();
}
Итак, мы прошлись циклом по архиву, переименовали каждый файлик и распаковали его в нужное место. Хочу отметить, что функция iconv для меня по каким-то таинственным причинам не сработала, поэтому, как вы видите, используется mb_convert_encoding.
Комментариев нет:
Отправить комментарий