Intereting Posts
Как обработчик Codeigniter выходит из вывода? Отправка данных, таких как целые числа и текстовые строки, из телефона в веб-базу данных Как получить вложенный список HTML из набора записей массива объектов? Codeigniter увеличивает время сеанса сеанса связи Сравнение строк PHP с использованием '==' Что лучше перенаправить, разрешение экрана или пользовательский агент? Laravel Eloquent: доступ к свойствам и имена динамических таблиц PHP – не может динамически создавать экземпляр класса Как исправить "не удалось открыть сокет в Zend Mail (Zend Framework 2) php 64 бит с php_int_max = 2147483647 Библиотека PHP для синтаксического анализа XML с двоеточиями в именах тегов? Сломанные ссылки, полученные из php, включают ссылки Создайте форму отправки (оберните таблицу в форму и покажите ее как таблицу снова) из продуктов, которые были заказаны сравнить строку с ключом sub в парциальном совпадении php-массива PHP: как я могу загрузить содержимое веб-страницы в переменную?

Проблема при записи файлов со специальными символами в PHP + Apache – проблема с кодировкой

еще раз у меня возникают проблемы с кодировками при попытке zip-файлов в приложении PHP.

Вот сделка, всякий раз, когда имя файла содержит специальные символы, то есть: «eñeìá.html», я не могу закрепить его правильно. Результат застегивания его с помощью php-функции AddFile – это «e + |e + ¼ + í» .html»

Проблемная линия заключается в следующем:

$ zip-> addFile ($ file_to_add_path, $ file_to_add-> getFilename ());

Я уже пробовал использовать iconv, utf8_decode / encode и т. Д., Но пока не повезло. Чем ближе я получил, тем выше пример при использовании htmlentities, а затем расшифровал их.

Я запускаю приложение в Xampp в ОС Win XP. Это может быть причиной проблемы.

Забавно, когда я разархивирую файл с именем, указанным ранее в приложении, его имя прекрасно, однако, когда я загружаю zip-файл и открываю его … bleh ..

В любом случае, спасибо заблаговременно всем, кто мог бы мне помочь или немного поучаствовать в этом. Если потребуется больше информации, пожалуйста, спросите меня об этом.

С наилучшими пожеланиями

У меня была та же проблема с центрально-европейскими символами, решена с использованием iconv("UTF-8", "CP852", $string) ; где CP852 является старой кодировкой DOS для Центральной Европы. Таким образом, это может помочь использовать соответствующую кодировку для вашего языка (я думаю, что это определяется внутренней конфигурацией алгоритма ZIP или что-то еще).

Перед застегиванием файла попробуйте URL-адрес, кодирующий имя файла:

http://php.net/manual/en/function.urlencode.php

Вы пробовали использовать другой клиент, чтобы открыть его, например, winRAR или что-то еще? Вероятно, это разница в версиях. Независимо от того, что вы создаете, он, вероятно, поддерживает символы unicode, а клиент, с которым вы его открываете, – нет.

При использовании iconv вы пытались играть с любыми параметрами добавления out_charset? Используя следующий код, я могу создать архив с файлом «los niños.txt», добавленным как «los nios.txt»,

 <?php $archivePath = realpath('.\test.zip'); $archive = new ZipArchive; $opened = $archive->open($archivePath, ZIPARCHIVE::OVERWRITE); if ($opened === true) { $directory = new DirectoryIterator('.'); foreach($directory as $fileInfo) { if ($fileInfo->isDot()) { continue; } if (preg_match('#.*\.txt$#', $fileInfo->getBasename())) { $cleanFilename = iconv("UTF-8", "ISO-8859-1//IGNORE", $fileInfo->getFilename()); $archive->addFile($fileInfo->getRealPath(), $cleanFilename); } } $closed = $archive->close(); if (!$closed) { echo "Could not create ZIP file<br/>"; } } else { echo "Could not open archive because of code {$opened}<br/>"; } 

В принципе, если iconv не может найти подходящую подстановку для символа UTF-8, он просто выкинет его и оставит остальную часть имени файла неповрежденной.