При закачке файловым менеджером IMCE файлов с названием в кириллице,эти названия конвертируются в что то типа _____________________.jpg.Как бороться с этим? Ставил этот модуль http://drupal.org/project/transliteration -не работает
При закачке файловым менеджером IMCE файлов с названием в кириллице,эти названия конвертируются в что то типа _____________________.jpg.Как бороться с этим? Ставил этот модуль http://drupal.org/project/transliteration -не работает
Комментарии
перед загрузкой называть файлы по-человечески. латиницей.
или как-то думать что бы назва файла транслитерацию проходила... имхо 1й вариант лучшЕ)
Есть модуль transliteration который при активации транслитит имена всех файлов при аплоаде - самый простой вариант, можно покавыряться с api и руками вызывать метод транслитерации из него или из pathauto модуля (он тоже может в транслит переводить)
2 известных мне факта:- имена кириллицей не поддерживаются файловой системой unix-серверов;
- IMCE не поддерживает Transliteration.
4 возможных выхода:- требовать называть файлы латиницей;
- ждать версии или патча одного из модулей (скорее всего IMCE) с поддержкой другого;
- самостоятельно добавить поддержку Transliteration в IMCE;
- найти решение с заменой IMCE на другой модуль.
[color=grey]--
что-то не то со стилями...[/color]
все основные ФС для *nix, конечно, поддерживают кирилицу. хитрость здесь в том что обязательно необходимо, чтобы языковая среда для всех процессов имеющих доступ к именам файлов была однотипной и предпочтительнее всего – UTF8.
Столкнулся с этой же проблемой, возможно кому-то пригодится. Изменения вносились в IMCE 5.x-1.2, файл imce.module
В самое начало добавить функцию конвертации кириллицы в латиницу:
* Cyrillic to latin characters translation. All cyrillic characters must be in CP1251.
*/
function imce_cyr2lat($string) {
$target = strtr($string,
"абвгдезийклмнопрстуфхыэАБВГДЕЗИЙКЛМНОПРСТУФХЫЭ",
"abvgdezijklmnoprstufhieABVGDEZIJKLMNOPRSTUFHIE");
$target = strtr($target, array(
'ё'=>"yo", 'ж'=>"zh", 'ц'=>"ts", 'ч'=>"ch", 'ш'=>"sh", 'щ'=>"sch", 'ъ'=>"", 'ь'=>"", 'ю'=>"yu", 'я'=>"ya",
'Ё'=>"Yo", 'Ж'=>"Zh", 'Ц'=>"Ts", 'Ч'=>"Ch", 'Ш'=>"Sh", 'Щ'=>"Sch", 'Ъ'=>"", 'Ь'=>"", 'Ю'=>"Yu", 'Я'=>"Ya"));
return $target;
}
А затем, в функцию imce_copy_uploaded() после строки "$file['tmp_name'] = $temp;" добавить следующий код (заодно он заменяет пробелы на '_' и убирает двойные точки в именах):
$file['name'] = iconv("UTF-8", "CP1251", $file['name']);
// Remove spaces and double dots
$file['name'] = str_replace(' ', '_', str_replace('..', '.', $file['name']));
// Translate filename from cyrillic to latin characters
$file['name'] = imce_cyr2lat($file['name']);
Наверняка это не самый оптимальный вариант, но он работает. Если кому-то лень исправлять вручную, то прикрепил уже готовый файл.
спасибо за опубликованный код!
Велосипеды уже придуманы:
$transliterated = transliteration_get($string);
transliteration_clean_filename();
}
куда бы это вставить?
Можно вместо функции imce_cyr2lat, а лучшу в issue IMCE если там еще нет такой темы
в линуксе поддерживается, косяк в самом IMCE по-моему
Господа, когда скачиваешь русский файл, написанный кракозяброй (Ïðèêëàäíàÿ....) IMCE выдает ссылку такого типа:
www.мойсайт/%CC%E5%F2%F0%EE%EB%EE%E3%E8%FF.%20%CA%EE%EC%EF%EB%E5%EA%F2%20%F0%E0%E7%EB%E8%F7%ED%FB%F5%20%F0%E5%F8%E5%ED%ED%FB%F5%20%E4%E7
Как кодируются символы в ссылке? Дело в том, что если заставить IMCE изображать ссылки правильно (убрать rawurlencode в одном месте), то перестают работать ссылки для скачивания. Если бы знать, как формируются эти ссылки, то может можно было бы добавить нужное конвертирование, и проблема была бы решена.