Загрузка файлов с кирилицей в названии (2.х)

+15
2.64K
При загрузке файла с латиницей в названии, все в порядке. Но если в названии присутствуют спецсимволы (например, кириллица), то они вырезаются и файл сохраняется в подобном виде: -.txt
Еще одна проблема в том, что если название файлов совпадает (даже латиницей), то они перезаписываются.

Открываем файл:
/system/core/uploader.php

Ищем строки:
  1. $dest_name = basename(files_sanitize_name($_FILES[$post_filename]['name']));
  2. $dest_ext = mb_strtolower(pathinfo($dest_name, PATHINFO_EXTENSION));
И меняем их на:
  1. $path_parts = pathinfo($_FILES[$post_filename]['name']);
  2. $dest_name = time(true).'_'.substr(md5($user->id.$user->files_count.microtime(true)), 0, 8).'_'.lang_slug($path_parts['filename']).'.'.$path_parts['extension'];
  3. $dest_ext = mb_strtolower($path_parts['extension']);
В результате кириллические имена файлов будут транслитирироваться, а к их названию будет добавляться уникальный префикс из юникс-даты (для сортировки) и md5-хеша.

Чтобы загружать файлы через лив-редактор, можно воспользоваться хаком.
+1
Dost Dost 8 лет назад #
Все хорошо, но о версии инстанта остается только догадываться.
+1
Def Def 8 лет назад #
догадываться не надо. очевидно, что речь о двойке.

я так полагаю этот хак и для файлов действует при их загруджке, а не только для картинок?
+2
Иван Шкута Иван Шкута 8 лет назад #
Ну да, для файлов и делал.
-1
No Name No Name 8 лет назад #
Большое спасибо,а вот что бы на сайте отображалось именно название по русски можно как то сделать?
0
Иван Шкута Иван Шкута 8 лет назад #
Вообще можно, но здесь уже существенно больше работы, столько времени у меня пока нет.
+1
Dorimen Dorimen 8 лет назад #
Хорошо бы, чтобы разработчики внесли эти изменения в ядро для последующих официальных версий, чтоб без этих хаков.

Еще от автора

Доступность всех групп при редактировании записи
Сейчас администратор при редактировании чьей-то записи не может указать группу в которой не состоит сам.
Редирект менеджер обновлен
Наконец-то дошли руки до редирект-менеджера, вернее до его обновления. Новое: Поддержка 2.10.0+ Маски для исходного URL Переменные для целевого URL
Поле "Точка на карте"
Это поле позволяет указать точку на карте (Яндекс.Карты) и вывести карту с этой точкой в записи / профиле / группе.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.