Php загрузка файлов кириллица

Php загрузка файлов кириллица

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

>
//—
?>
Но смысла в этом мало:
-хостинг может неккоректно обрабатывать такой запрос
-вы получите файл с названием не на русском, а на url коде
-надо учитывать что длинные названия на русском могут не работать

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить имена всех файлов, которые были открыты с помощью приложения Kn793 Общие вопросы Delphi 9 10.07.2008 15:31
Как получить имена нескольких файлов выделенных в OpenDialog Comer_Jus Общие вопросы Delphi 2 26.05.2008 19:47
как считать имена файлов из директории и поддерикторий в массив, ХЭЛП uraveselov Microsoft Office Excel 2 10.04.2008 09:50
Есть 2 листбокса, в 1 пути к файлам, во 2 имена этих файлов. delphi. Xandr Помощь студентам 2 06.10.2007 00:17
Имена хостов 🙁 InseR Работа с сетью в Delphi 1 04.07.2007 12:15

Источник

Php загрузка файлов кириллица

//file archiving - файл для архивирования, в php вместо пробелов не нужно указывать "%20", лучше указывать "_" $file_archiving ='Library/Pravila_doroznogo_dvizeniya_RF.doc'; //file in archive - файл в архиве, в php вместо пробелов не нужно указывать "%20", лучше указывать "_" $file_in_archive ='Library/Pravila_doroznogo_dvizeniya_RF.zip'; //file in archive - файл в архиве, в php вместо пробелов не нужно указывать "%20", лучше указывать "_" $file_archiving1 ='Правила дорожного движения РФ.doc'; //file in archive - файл в архиве, в php вместо пробелов не нужно указывать "%20", лучше указывать "_" $file_in_archive1 ='Правила дорожного движения РФ.zip'; $size = file_size($file_archiving); echo " Скачать файл: $file_archiving1, размер файла: $size"; //if - если, isset — определяет, была ли установлена переменная значением отличным от NULL if (isset($file_archiving)) < //создаётся объект $zip_archive = new ZipArchive(); //if - если, $zip_archive ->open(getcwd()."/$file_in_archive", ZIPARCHIVE::CREATE - открывается новый zip-архив if ($zip_archive -> open(getcwd()."/$file_in_archive", ZIPARCHIVE::CREATE) == TRUE) < //к архиву добавляется файл (это можно повторить несколько раз) $zip_archive ->addFile($file_archiving, $file_archiving); //закрывается созданный архив с сохранением всех добавлений $zip_archive -> close(); $size = file_size($file_in_archive); echo " Или скачать заархивированный файл: $file_in_archive1, размер файла: $size"; > >

я слышал, что нужно забудьть вообще о русском языке в программировании, его там не существует
но тогда может есть прога, которая закидывает файлы на сервер переименовывая их в траслит?

Читайте также:  Running native java on android

верить — не верить ваше дело. Но то что нативной поддержки кириллицы нет в вебе — да и не только — однозначно. Можно взять и наваять простую функцию на php и пользоваться.
ИМХО . пользователю вообще глубоко начихать как и что называется. лишь была та инфа, которая нужна

Источник

Транслитерация загружаемых файлов на PHP

Здравствуйте, я криворукий (ну т.е. начинающий) PHP-программист, и есть у меня такая проблема: у меня есть скрипт загрузки файлов в указанную директорию, но по плачевному стечению обстоятельств — русское наименование файла не может быть ссылкой, поэтому я пробовал сделать транслитерацию загружаемого файла, но у меня ничего не вышло. Поэтому обращаюсь к более опытным PHP-прогерам!

вот собственно сам код загрузки файлов, в котором мне нужно сделать транслитерацию:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
 if ( isset ( $_POST["send"] ) ) { $filetype = array ( 'jpg', 'gif', 'png', 'jpeg', 'bmp' ); //разрешенные форматы $upfiletype = substr( $_FILES['upfile']['name'], strrpos( $_FILES['upfile']['name'], "." ) + 1 ); $direct = '/home/casualrules.ru/www/img/galery/'; //это сама директория, куда заливаются файлы на моем сайте if ( in_array ( $upfiletype, $filetype ) ) { if ( $_FILES["upfile"]["size"] > 1024*1024*10 ) { //это максимальный размер загружаемого файла echo ( "Размер файла превышает допустимый." ); } else { if ( is_uploaded_file ( $_FILES["upfile"]["tmp_name"] ) ) { if ( move_uploaded_file ( $_FILES["upfile"]["tmp_name"], $direct.$_FILES["upfile"]["name"] ) ) { echo "Файл успешно загружен!"; } else { echo "Файл не удалось загрузить на сервер."; } } else { echo "Файл загрузить не удалось."; } } } else { echo "Формат этого файла не подходит для данного раздела сайта!"; } } ?>

Источник

Кириллица в параметре Filename заголовка Content-Disposition

Возникла следующая проблема. Имеется веб-приложение (клиент на js, сервер на php) и некое файловое хранилище. Чтобы скачать файл из хранилища, клиентская часть веб-приложения шлет запрос на серверную, там выполняется бизнес логика (проверка прав доступа и т.д.), если все ок, то отдается ссылка на файл. Затем клиентская часть делает редирект на эту ссылку. На сервере файлового хранилища стоит nginx, который и отдает файлы. Имена у файлов представляют собой набор символов без смыслового содержания (просто GUID), что не очень нравилось пользователям. Они хотели бы, чтобы при скачивании у файла было такое же имя, как у соответствующей ему сущности в веб-приложении. Поскольку переименовывать файлы очень не хотелось бы по некоторым причинам, было придумано следующее:

1. При формировании ссылки в серверной части веб-приложения к ней цепляется GET-параметр, в котором содержится приемлемое для пользователя имя файла.
2. В конфиге nginx при отдаче файла этот параметр подставляется в заголовок Content-Disposition.
(add_header Content-Disposition ‘attachment;Filename=$args’;)

Проблемы начались с подстановкой в Content-Disposition русского текста.
Во-первых, firefox при редиректе на хранилище делает urlencode ссылки. И nginx в Content-Disposition подставляет закодированную строку. Соответственно firefox предлагает сохранить файл также под закодированным именем.
Во-вторых, даже если в Content-Disposition будет незакодированная строка, но в UTF-8 с кириллицей, то IE ничего знать не хочет о том, что это UTF-8. Интерпретирует его как cp1251 и имя файла получается с кракозябрами.

В общем, данная схема нормально работает только в хроме. Если я не ошибаюсь, то с проблемой номер 1 (urlencode) можно справиться, если пересобрать nginx из исходников, включив в него модуль ngx_set_misc. Тогда в конфиге nginx можно будет с помощью set_unescape_uri сделать urldecode для имени файла перед тем как вставлять его в заголовок Content-Disposition. Но к такому варианту хотелось бы прибегать в последнюю очередь.
А как решить проблему с IE — вообще не знаю.

В общем, я в тупике. Был бы очень благодарен за совет, может быть есть гораздо более простой способ решения моей задачи, а я его в упор не вижу.

Оценить 3 комментария

Источник

Оцените статью