Наверх

CKFinder 3 - делаем автоматический транслит загружаемых файлов

Опубликовано:
3657
1 2 3 4 5
(100%) / 1

Если вы используете на своем сайте редактор CKEditor 4 совместно с файлменеджером CKFinder 3, то этот урок для Вас. 

Когда я начал собирать для одного ресурса редактор, то столкнулся с проблемой загрузки файлов, все загружаемые файлы, которые имели кириллическое название файлов были декодированы и имели вот такой вид: "/upload/files/%D0%B5%D1%89%D0%B5%20%.jpg" 

 

Хочу отметить, что автоматический транслит загружаемых файлов в CKfinder и CKeditor  нужно выполнить обязательно, так как не все серверы дружат с файлами, которые имеют русские символы.

 

Делаем транслитерацию имен файлов в CKeditor и CKfinder в 2 шага.

 

Шаг 1. Ищем файл обработчик, который загружаем файлы на сервер.

Открываем файл: ВАШИ СЕРВЕРНЫЕ ПАПКИ/ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Filesystem/File/UploadedFile.php

Находим строку: (у меня это 115 строка)  функция sanitizeFilename()

$this->fileName = static::secureName($this->fileName, $this->config->get('disallowUnsafeCharacters'));

 

Ниже вставляем следующий код:

if($this->config->get('forceAscii')){
 //Создаем массив с буквами с нижнем регистре
 $lower_str=array(
 'à' => 'a', 'ô' => 'o', 'ď' => 'd', 'ḟ' => 'f', 'ë' => 'e', 'š' => 's', 'ơ' => 'o',
 'ß' => 'ss', 'ă' => 'a', 'ř' => 'r', 'ț' => 't', 'ň' => 'n', 'ā' => 'a', 'ķ' => 'k',
 'ŝ' => 's', 'ỳ' => 'y', 'ņ' => 'n', 'ĺ' => 'l', 'ħ' => 'h', 'ṗ' => 'p', 'ó' => 'o',
 'ú' => 'u', 'ě' => 'e', 'é' => 'e', 'ç' => 'c', 'ẁ' => 'w', 'ċ' => 'c', 'õ' => 'o',
 'ṡ' => 's', 'ø' => 'o', 'ģ' => 'g', 'ŧ' => 't', 'ș' => 's', 'ė' => 'e', 'ĉ' => 'c',
 'ś' => 's', 'î' => 'i', 'ű' => 'u', 'ć' => 'c', 'ę' => 'e', 'ŵ' => 'w', 'ṫ' => 't',
 'ū' => 'u', 'č' => 'c', 'ö' => 'oe', 'è' => 'e', 'ŷ' => 'y', 'ą' => 'a', 'ł' => 'l',
 'ų' => 'u', 'ů' => 'u', 'ş' => 's', 'ğ' => 'g', 'ļ' => 'l', 'ƒ' => 'f', 'ž' => 'z',
 'ẃ' => 'w', 'ḃ' => 'b', 'å' => 'a', 'ì' => 'i', 'ï' => 'i', 'ḋ' => 'd', 'ť' => 't',
 'ŗ' => 'r', 'ä' => 'ae', 'í' => 'i', 'ŕ' => 'r', 'ê' => 'e', 'ü' => 'ue', 'ò' => 'o',
 'ē' => 'e', 'ñ' => 'n', 'ń' => 'n', 'ĥ' => 'h', 'ĝ' => 'g', 'đ' => 'd', 'ĵ' => 'j',
 'ÿ' => 'y', 'ũ' => 'u', 'ŭ' => 'u', 'ư' => 'u', 'ţ' => 't', 'ý' => 'y', 'ő' => 'o',
 'â' => 'a', 'ľ' => 'l', 'ẅ' => 'w', 'ż' => 'z', 'ī' => 'i', 'ã' => 'a', 'ġ' => 'g',
 'ṁ' => 'm', 'ō' => 'o', 'ĩ' => 'i', 'ù' => 'u', 'į' => 'i', 'ź' => 'z', 'á' => 'a',
 'û' => 'u', 'þ' => 'th', 'ð' => 'dh', 'æ' => 'ae', 'µ' => 'u', 'ĕ' => 'e',

 'а'=>'a','б'=>'b','в'=>'v','г'=>'g','д'=>'d','е'=>'e','ё'=>'yo','ж'=>'zh','з'=>'z','и'=>'i','й'=>'y',
 'к'=>'k','л'=>'l','м'=>'m','н'=>'n','о'=>'o','п'=>'p','р'=>'r','с'=>'s','т'=>'t','у'=>'u','ф'=>'f',
 'х'=>'h','ц'=>'ts','ч'=>'ch','ш'=>'sh','щ'=>'shch','ъ'=>'','ы'=>'i','ь'=>'','э'=>'e','ю'=>'yu','я'=>'ya',
 'ґ'=>'g','є'=>'e','і'=>'i','ї'=>'i',
 );
 //Создаем массив с буквами с верхнем регистре
 $upper_str = array(
 'À' => 'A', 'Ô' => 'O', 'Ď' => 'D', 'Ḟ' => 'F', 'Ë' => 'E', 'Š' => 'S', 'Ơ' => 'O',
 'Ă' => 'A', 'Ř' => 'R', 'Ț' => 'T', 'Ň' => 'N', 'Ā' => 'A', 'Ķ' => 'K',
 'Ŝ' => 'S', 'Ỳ' => 'Y', 'Ņ' => 'N', 'Ĺ' => 'L', 'Ħ' => 'H', 'Ṗ' => 'P', 'Ó' => 'O',
 'Ú' => 'U', 'Ě' => 'E', 'É' => 'E', 'Ç' => 'C', 'Ẁ' => 'W', 'Ċ' => 'C', 'Õ' => 'O',
 'Ṡ' => 'S', 'Ø' => 'O', 'Ģ' => 'G', 'Ŧ' => 'T', 'Ș' => 'S', 'Ė' => 'E', 'Ĉ' => 'C',
 'Ś' => 'S', 'Î' => 'I', 'Ű' => 'U', 'Ć' => 'C', 'Ę' => 'E', 'Ŵ' => 'W', 'Ṫ' => 'T',
 'Ū' => 'U', 'Č' => 'C', 'Ö' => 'Oe', 'È' => 'E', 'Ŷ' => 'Y', 'Ą' => 'A', 'Ł' => 'L',
 'Ų' => 'U', 'Ů' => 'U', 'Ş' => 'S', 'Ğ' => 'G', 'Ļ' => 'L', 'Ƒ' => 'F', 'Ž' => 'Z',
 'Ẃ' => 'W', 'Ḃ' => 'B', 'Å' => 'A', 'Ì' => 'I', 'Ï' => 'I', 'Ḋ' => 'D', 'Ť' => 'T',
 'Ŗ' => 'R', 'Ä' => 'Ae', 'Í' => 'I', 'Ŕ' => 'R', 'Ê' => 'E', 'Ü' => 'Ue', 'Ò' => 'O',
 'Ē' => 'E', 'Ñ' => 'N', 'Ń' => 'N', 'Ĥ' => 'H', 'Ĝ' => 'G', 'Đ' => 'D', 'Ĵ' => 'J',
 'Ÿ' => 'Y', 'Ũ' => 'U', 'Ŭ' => 'U', 'Ư' => 'U', 'Ţ' => 'T', 'Ý' => 'Y', 'Ő' => 'O',
 'Â' => 'A', 'Ľ' => 'L', 'Ẅ' => 'W', 'Ż' => 'Z', 'Ī' => 'I', 'Ã' => 'A', 'Ġ' => 'G',
 'Ṁ' => 'M', 'Ō' => 'O', 'Ĩ' => 'I', 'Ù' => 'U', 'Į' => 'I', 'Ź' => 'Z', 'Á' => 'A',
 'Û' => 'U', 'Þ' => 'Th', 'Ð' => 'Dh', 'Æ' => 'Ae', 'Ĕ' => 'E',

 'А'=>'A','Б'=>'B','В'=>'V','Г'=>'G','Д'=>'D','Е'=>'E','Ё'=>'Yo','Ж'=>'Zh','З'=>'Z','И'=>'I','Й'=>'Y',
 'К'=>'K','Л'=>'L','М'=>'M','Н'=>'N','О'=>'O','П'=>'P','Р'=>'R','С'=>'S','Т'=>'T','У'=>'U','Ф'=>'F',
 'Х'=>'H','Ц'=>'Ts','Ч'=>'CH','Ш'=>'Sh','Щ'=>'Shch','Ъ'=>'','Ы'=>'I','Ь'=>'','Э'=>'E','Ю'=>'Yu','Я'=>'Ya',
 'Ґ'=>'g','Є'=>'e','І'=>'i','Ї'=>'i','№'=>'no_',
 );
 // Замена маленьких букв
 $this->fileName=str_replace(
 array_keys($lower_str),
 array_values($lower_str),
 $this->fileName
 );
 // Замена заглавных букв
 $this->fileName=str_replace(
 array_keys($upper_str),
 array_values($upper_str),
 $this->fileName
 );
 // Ставим дополнительный фильтр для спец символов
 $this->fileName=preg_replace(
 array(
 '/[&]/', // амперсанды
 '/[\s]/', // пробелы
 '/[^a-z_\.\d\(\)-]/i', // все кроме допустимых символов (английский алфавит, цифры, тире и нижнее подчеркивание)
 ),
 array(
 'and',
 '_',
 '',
 ),
 $this->fileName
 );
}

 

После того как мы добавили замену символов на английские буквы, теперь нам нужно активировать эту функцию.

 

Шаг 2. Активируем функцию транслита

Ищем файл: СЕРВЕРНЫЕ ПАПКИ/ckfinder/config.php

Находим строку:

$config[‘forceAscii’] = false;

Меняем значение параметра false на true

 

Получилось вот так:

$config[‘forceAscii’] = true;

 

Вывод:

После того как мы настроили CKFinder, наш редактор теперь умеет автоматически переводить русские символы на английские. 
Исходный загружаемый файл: русские символы с пробелом.jpg
На выходе мы будем получать: /upload/files/russkie_simvoli_s_probelom.jpg

 

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



Дорогой web-мастер.
Для меня очень важна обратная связь от Вас в виде лайков или рейтинга.
Пожалуйста оцените эту публикацию или поставь лайк за старание.
Статья подготовлена для Вас сайтом kisameev.ru
Перевел: Кисамеев Дмитрий
Статью просмотрели: 3657
Понравилось:
Поделится ссылкой
Теги:
Комментариев...
Оставьте его первым.

Для вставки кода используйте комментарии от ВК или FB:

Похожие публикации

Ckeditor довольно хороший визуальный инструмент для редактирование контента на Вашем сайте, но его стандартные функции не всегда удовлетворяют потребности концепции...

Нашли баг или ошибку?

Выдели текст
мышкой и нажми:
Нашел ошибку