Использование файловой системы для сохранения характеристик имени загружаемых файлов, особенно тех, которые содержат символы UTF-8, является плохой идеей.
Гораздо лучшим подходом было бы создание уникального хэша для каждого загруженного файла и его сохранение в базе данных вместе с настоящим именем файла.
Другими словами, если вы решили загрузить файл с именем Şömine.jpg после загрузки, вы не сохраняете его с его оригинальным именем, а вместо этого генерируете для него уникальный md5 (в данном случае ecc3a7d1bdd36b0849ab609857351cd1
) и сохраните файл под именем ecc3a7d1bdd36b0849ab609857351cd1.jpg
.
После этого вы просто добавляете в свою базу данных запись, указывающую, что ecc3a7d1bdd36b0849ab609857351cd1
фактически представляет файл с именем «Şömine.jpg».
Когда вам нужно получить файл, вы просто ищете имя в базе данных и извлекаете файл с соответствующим хешем в его имени. После этого вы используете следующие заголовки, чтобы предоставить пользователю файл с его исходным именем.
header("Content-Disposition: attachment; filename=FILENAME_FROM_THE_DATABASE");