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

Автор: CozaNostra
Опубликовано: 471 день назад (6 февраля 2011)
Редактировалось: 4 раза — последний 29 апреля 2011
+45
Голосов: 47
Столкивался с проблемой такого характера, при загрузке русско язычных файлов, пользователь потом не мог скачать его и получал подобное сообщение

Forbidden

You don't have permission to access /upload/userfiles/1/íîâîñòè.zip on this server.

типа файл не найден, но мы то знаем что он есть, оказывается просто он не "видит" русских букв.

не заставишь ведь всех пользователей грузить файлы на английском алфавите :)

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

вот решение:

открываем /components/users/frontend.php

ищем в нем строку

Код PHP:
if (move_uploaded_file($tmp_name, PATH."/upload/userfiles/$id/$name")){
и перед ней,но после { вставляем следущее

Код PHP:
$name=strtr($name,"абвгдеёзийклмнопрстуфхъыэ_","abvgdeeziyklmnoprstufh'iei");

 						$name=strtr($name,"АБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ_","ABVGDEEZIYKLMNOPRSTUFH'IEI"); 

						$name=strtr($name, array(
						"ж"=>"zh", "ц"=>"ts", "ч"=>"ch", "ш"=>"sh", 
						"щ"=>"shch","ь"=>"", "ю"=>"yu", "я"=>"ya",
						"Ж"=>"ZH", "Ц"=>"TS", "Ч"=>"CH", "Ш"=>"SH", 
						"Щ"=>"SHCH","Ь"=>"", "Ю"=>"YU", "Я"=>"YA",
						"ї"=>"i", "Ї"=>"Yi", "є"=>"ie", "Є"=>"Ye") );
вот и все результат такой

выбрано на русском


загруженно так


с подачи Fuze изменил чуть чуть код :)
вставлять туда же)
Код PHP:
$info = pathinfo($name);
$file_name =  basename($name,'.'.$info['extension']);
$file_name = cmsCore::strToURL($file_name);
$ext = substr($name,1+strrpos($name,"."));
$name=$file_name.".".$ext;
Благодарности
Воcстановление пароля (сторонний скрипт) | Шаблон отображения профиля пользователя
Теги: файлы
Князь Мышкин # 6 февраля 2011 в 19:36 +2
Вы мегакреативны Плюсую вам
CozaNostra # 6 февраля 2011 в 19:45 +3
Благодарю, я польщен :)
Boffka # 6 февраля 2011 в 19:49 0
Работает не покладая рук:)
CozaNostra # 6 февраля 2011 в 19:58 +2
Стараюсь, может кому то еще пригодятся нароботки)
CozaNostra # 6 февраля 2011 в 19:59 0
Судя по оценкам не всем нравится что я делаю оценок 6 а общая +4 :)
Князь Мышкин # 6 февраля 2011 в 22:12 +2
Ты еще не видел, как на Хабре оценивают. До сих пор из минуса не вышел
Настёна # 6 февраля 2011 в 20:11 +1
Умничка! +
nikolas # 6 февраля 2011 в 20:13 +2
поставил +
CozaNostra # 6 февраля 2011 в 20:15 +3
Спасибо все что еще придет в голову реализую и расскажу)
braincord # 6 февраля 2011 в 20:48 +2
молодец +
Fuze # 6 февраля 2011 в 21:22 +6
эту страшную конструкцию можно заменить на

Код PHP:
$name = cmsCore::strToURL($name);
CozaNostra # 6 февраля 2011 в 23:28 +3
спасибо)
Katerina # 7 февраля 2011 в 08:58 0
Так у меня не получается, файл сохраняется некорректно, через тире вместо точки. (abc-jpg)
Fuze # 7 февраля 2011 в 09:08 0
согласен, через этот метод надо прогонять имя файла без расширения.
CozaNostra # 7 февраля 2011 в 17:31 0
значит это не тут нужно, или чтобы он определил расширение, сменил имя и дописал расширение)
forlord # 7 февраля 2011 в 14:54 0
я такое уже давно сделал, заодно еще и описание добавил к ним ))
Katerina # 7 февраля 2011 в 15:15 0
А нельзя ли где-нибудь поподробнее про описания...
forlord # 7 февраля 2011 в 16:08 +1
можно. в двух словах: Пользователь загружает файл и пишет к нему описание, которое и будет показано вместо названия файла, также к этому делу был еще и модуль (файлы пользователей) с сортировками в разных вариантах в который встроен плеер.
forlord # 7 февраля 2011 в 20:37 0
желающие пишите))
BilarИuss # 6 февраля 2011 в 21:33 +1
+
lezginka.ru # 6 февраля 2011 в 21:49 +1
+ и Fuze тоже :)
trish # 7 февраля 2011 в 10:38 0
здорово придумали!
Edik_Salonikski # 7 февраля 2011 в 12:02 0
+
0 # 7 февраля 2011 в 14:55 -1
а в utf8 хоть на японском грузи
Katerina # 7 февраля 2011 в 15:16 0
Спасибо!
Barrio design # 7 февраля 2011 в 19:23 0
а вообще это как бы баг ...
CozaNostra # 7 февраля 2011 в 22:04 0
что именно баг?
Barrio design # 7 февраля 2011 в 22:50 0
что файлы в транслит не переводит
Fuze # 7 февраля 2011 в 22:55 +1

вообще то баг это кривые настройки локали сервера хостера!
Нормальный хостер (администратор сервера) такого казуса НИКОГДА не допустит.

А так конечно в следующем релизе уберем эту досадную неприятность, но правда более простым способом 

CozaNostra # 7 февраля 2011 в 22:58 0
можно полюбопытствовать каким?)
Fuze # 7 февраля 2011 в 23:20 0
первое что пришло сейчас в голову

Код PHP:
$name       = md5($size.$name).'.'.$ext;
после строчки

Код PHP:
$ext        = strtolower($path_parts['extension']);
CozaNostra # 7 февраля 2011 в 23:38 0
имя тогда файла тоже хэшем будет?
Fuze # 8 февраля 2011 в 00:16 0

да

плюс этого, что прямую ссылку достаточно нетривиально узнать на файл

CozaNostra # 8 февраля 2011 в 00:29 0
ну тогда можно сделать типа [code=php] $file_name [/code]
CozaNostra # 8 февраля 2011 в 00:29 0
блин как код вставлять?((((((((((
Barrio design # 8 февраля 2011 в 13:02 0
я вот про это и имел в виду :)
Fuze # 19 марта 2011 в 23:40 0
CozaNostra # 20 марта 2011 в 00:31 0
вот) теперь лучше)
RooKee # 2 мая 2011 в 19:03 0
в 1,8 это реализовано?