sbh
@sbh

Как обрабатывать файлы с русскими именами при загрузке POST?

Есть клиент который загружает файлы POST запросом.
Имена у файлов иногда бывают на русском языке. И вот когда такие файлы приходят на сервер - он их не сохраняет.
Можно как-то это исправить не меняя клиента?
Я понимаю что можно в клиенте внести изменения - например добавить транслитерацию перед загрузкой, но на данный момент есть только возможность поменять серверную часть.

Файл сохраняется стандартно:
move_uploaded_file($_FILES["filename"]["tmp_name"], $upload_dir_name . '/' . $ClientName . "/" . $ContentTypeDir . '/' . $file_name);


Имя файла собственно выглядит на сервере в момент передачи вот так:
=?KOI8-R?B?4dfEz9TY0TIzMi50eHQ=?=
  • Вопрос задан
  • 237 просмотров
Пригласить эксперта
Ответы на вопрос 2
kimono
@kimono
Web developer
Так, видимо, вся проблема в вашем:
move_uploaded_file($_FILES["filename"]["tmp_name"], $upload_dir_name . '/' . $ClientName . "/" . $ContentTypeDir . '/' . $file_name);

Откуда берётся $file_name?
Сделайте через транслитерацию, либо вообще сохраняйте со случайным хешем:
move_uploaded_file($_FILES["filename"]["tmp_name"], $upload_dir_name . '/' . $ClientName . "/" . $ContentTypeDir . '/' . MyRandomGenerator::getString());
Ответ написан
SerafimArts
@SerafimArts
Senior Notepad Reader
Файл сохраняется стандартно:


Это не стандартно. Так никто не делает, просто потому, что это дыра в безопасности. Не то что дыра, а прям дырищща. Если клиент передаст вам файл с каким-нибудь именем (естественно заэкранированным, т.к. точки сервак не пропустит) "../../../index.php", например, вы его так и сохраните?

Делайте какой-нибудь "\md5($fileName . \random_int(0, \PHP_INT_MAX))" и не выдумывайте проблем себе.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы