Intereting Posts
foreach loop over SimpleXMLElement не работает, только 1 элемент в результате Swiftmailer удаляет вложение после отправки Сеансы PHP – вопросы по блокировке и совместному использованию найти шаблон для URL-адреса без конечной косой черты Валидация пользовательских данных не работает PHP-код для тестирования pdo доступен? SDK SDK Paypal собирается из песочницы, чтобы жить Операторы динамического сравнения в PHP Пользовательский просмотр Помощник сбой при получении строкового параметра Как правильно получить контент и не нарушать html-теги с помощью strip_tags с substr? woocommerce получить информацию о заказе после оформления заказа Производительность в PDO / PHP / MySQL: транзакция против прямого выполнения PHP-конструкторы и статические функции Переходы Doctrine можно использовать в производственных приложениях? Загружайте видео на мой канал Youtube без аутентификации пользователей с помощью YoutubeApi v3 и ouath2

кодировка содержимого php zip

Я создаю некоторые .txt-файлы (с греческими символами) через php-скрипт с кодировкой UTF-8. Когда я пытаюсь загрузить и прочитать эти файлы с ftp, все работает нормально (без проблем с кодировкой).

Когда я застегиваю эти файлы в zip-архив, я столкнулся с проблемой кодирования со всеми греческими символами и символами newLines.

zip-скрипт:

$zip = new ZipArchive(); $filename = "my_zip.zip"; if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) { exit("cannot open <$filename>\n"); } $files = glob('users/'.$_SESSION['s_uid'].'/*'); // get all file names foreach($files as $file){ // iterate files if(is_file($file)) //$zip->addFile($thisdir . $file, basename($file)); $zip->addFile($thisdir . $file, iconv("UTF-8","UTF-8", basename($file))); //echo $file; // delete file } $zip->close(); 

Это, по-видимому, неразрешенная ошибка в PHP, которая не может обрабатывать имена файлов в кодировке UTF-8.

Аналогичный вопрос есть и по этому вопросу.

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

Я также столкнулся с проблемой извлечения ZIP-архива с символами UTF8. Я не нашел реального решения этой проблемы (я думаю, что проблема в PECL по-прежнему существует, так как я работаю с 5.6) https://bugs.php.net/bug.php?id=53948

… поэтому я придумал обходное решение, которое включает переименование архивных файлов до их извлечения. С помощью этого обходного пути я могу разрешить пользователям загружать имена файлов UTF8 в их архив, но я просто заменяю специальный символ регулярным выражением.

  $zip = new ZipArchive; if ($zip->open($file_path) === true) { for ($i = 0; $i < $zip->numFiles; $i++) { $fname = $zip->getNameIndex($i); $fname_new = // your str replacemenet code... $zip->renameIndex($i, $fname_new);