Php транслитерация имени файла

Php транслитерация имени файла

Периодически встречаются задачи, где требуется перевести русский текст в транслит. Например, из имени и фамилии человека сделать почту и перевести ее в транслит, или символьный код новости для ЧПУ сформировать. Мы рассмотрим два варианта решения: 1) для любых сайтов на php и 2) для битрикса Первый вариант универсальный может использоваться на всех сайтах, так как мы напишем php функцию для транслита. Для этого нам понадобится два массива: один с русскими буквами, второй с буквами на транслите и функцию str_replace. Если мы посмотрим документацию, то там сказано

Если и search, и replace — массивы, то str_replace() использует все значения массива search и соответствующие значения массива replace для поиска и замены в subject. Если в массиве replace меньше элементов, чем в search, в качестве строки замены для оставшихся значений будет использована пустая строка.

$russian = array('А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я', 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я'); $translit = array('A', 'B', 'V', 'G', 'D', 'E', 'E', 'Gh', 'Z', 'I', 'Y', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'F', 'H', 'C', 'Ch', 'Sh', 'Sch', 'Y', 'Y', 'Y', 'E', 'Yu', 'Ya', 'a', 'b', 'v', 'g', 'd', 'e', 'e', 'gh', 'z', 'i', 'y', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'h', 'c', 'ch', 'sh', 'sch', 'y', 'y', 'y', 'e', 'yu', 'ya');

А значит нам достаточно просто передать эти два массива и строку для получения транслита. Создадим функцию translit

function translit($str) < $russian = array('А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я', 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я'); $translit = array('A', 'B', 'V', 'G', 'D', 'E', 'E', 'Gh', 'Z', 'I', 'Y', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'F', 'H', 'C', 'Ch', 'Sh', 'Sch', 'Y', 'Y', 'Y', 'E', 'Yu', 'Ya', 'a', 'b', 'v', 'g', 'd', 'e', 'e', 'gh', 'z', 'i', 'y', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'h', 'c', 'ch', 'sh', 'sch', 'y', 'y', 'y', 'e', 'yu', 'ya'); return str_replace($russian, $translit, $str); >echo translit("Русский текст в транслит");?>

Но не будем забывать, что некоторые буквы в транслите могут содержать апостроф, который недопустим в ЧПУ, поэтому данный массив $translit не содержит апостроф. Все таки мы это делаем для получения ЧПУ. 2) Вариант для Битрикс. В битриксе уже заложено много полезных функций, в том числе и транслит.

Читайте также:  Javascript find and replace all

Cutil::translit($name,$lang,$params);

где $name — строка текста для транслита $lang — язык с которого производится транслитерация $params — параметры перевода
Массив параметров: max_len ограничение количества символов, по умолчанию — 100 change_case к какому регистру приводить: L — к нижнему, U — к верхнему, false — не изменять. По умолчанию — «L» replace_space чем заменять пробел, по умолчанию: «_» replace_other чем заменять прочие символы, по умолчанию: «_» delete_repeat_replace удалять повторяющиеся пробелы, по умолчанию — «true» safe_chars строка из символов, замена которых не производится
За нас уже все придумали. Нам надо только вывести его

"-","replace_other"=>"-"); $trans = Cutil::translit($name,"ru",$arParams); echo $trans; ?>

Источник

PHP транслит

PHP функции для перевода текста, ЧПУ, ссылок и имен файлов в транслит.

Транслит для текста

function translit($value) < $converter = array( 'а' =>'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'e', 'ж' => 'zh', 'з' => 'z', 'и' => 'i', 'й' => 'y', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c', 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sch', 'ь' => '', 'ы' => 'y', 'ъ' => '', 'э' => 'e', 'ю' => 'yu', 'я' => 'ya', 'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D', 'Е' => 'E', 'Ё' => 'E', 'Ж' => 'Zh', 'З' => 'Z', 'И' => 'I', 'Й' => 'Y', 'К' => 'K', 'Л' => 'L', 'М' => 'M', 'Н' => 'N', 'О' => 'O', 'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T', 'У' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C', 'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Sch', 'Ь' => '', 'Ы' => 'Y', 'Ъ' => '', 'Э' => 'E', 'Ю' => 'Yu', 'Я' => 'Ya', ); $value = strtr($value, $converter); return $value; > echo translit('Яндекс, Гугл, Майл ру');

Результат

Транслит для ЧПУ

Транслитерация для части URL (path), текст переводится в нижний регистр, пробелы и знаки препинания заменяются на « — ».

function translit_sef($value) < $converter = array( 'а' =>'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'e', 'ж' => 'zh', 'з' => 'z', 'и' => 'i', 'й' => 'y', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c', 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sch', 'ь' => '', 'ы' => 'y', 'ъ' => '', 'э' => 'e', 'ю' => 'yu', 'я' => 'ya', ); $value = mb_strtolower($value); $value = strtr($value, $converter); $value = mb_ereg_replace('[^-0-9a-z]', '-', $value); $value = mb_ereg_replace('[-]+', '-', $value); $value = trim($value, '-'); return $value; > echo translit_sef('Яндекс, Гугл, Майл ру');

Результат:

Транслит для URL

В данную функцию можно передавать URL целиком, домен и GET параметры останутся без изменений.

function translit_path($value) < $converter = array( 'а' =>'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'e', 'ж' => 'zh', 'з' => 'z', 'и' => 'i', 'й' => 'y', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c', 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sch', 'ь' => '', 'ы' => 'y', 'ъ' => '', 'э' => 'e', 'ю' => 'yu', 'я' => 'ya', ); $value = mb_strtolower($value); $value = strtr($value, $converter); $value = mb_ereg_replace('[^-0-9a-z\.]', '-', $value); $value = mb_ereg_replace('[-]+', '-', $value); $value = trim($value, '-'); return $value; > function traslit_url($url) < $url = parse_url(trim($url)); if (!empty($url['host'])) < $res = ''; if (!empty($url['scheme'])) < $res .= $url['scheme'] . '://'; >if (!empty($url['host'])) < $res .= idn_to_ascii($url['host']); >if (!empty($url['port'])) < $res .= ':' . $url['port']; >if (!empty($url['path'])) < $path = explode('/', $url['path']); foreach ($path as $i =>$row) < if (preg_match('/[а-яё]/iu', $row)) < $path[$i] = translit_path($row); >> $res .= implode('/', $path); > if (!empty($url['query'])) < $res .= '?' . $url['query']; >if (!empty($url['fragment'])) < $res .= '#' . $url['fragment']; >return $res; > else < return translit_path($url); >> echo traslit_url('https://example.com/category/статья о транслите.html?page=1');

Результат:

https://example.com/category/statya-o-translite.html?page=1

Транслит для имен файлов

function translit_file($filename) < $converter = array( 'а' =>'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'e', 'ж' => 'zh', 'з' => 'z', 'и' => 'i', 'й' => 'y', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c', 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sch', 'ь' => '', 'ы' => 'y', 'ъ' => '', 'э' => 'e', 'ю' => 'yu', 'я' => 'ya', 'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D', 'Е' => 'E', 'Ё' => 'E', 'Ж' => 'Zh', 'З' => 'Z', 'И' => 'I', 'Й' => 'Y', 'К' => 'K', 'Л' => 'L', 'М' => 'M', 'Н' => 'N', 'О' => 'O', 'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T', 'У' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C', 'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Sch', 'Ь' => '', 'Ы' => 'Y', 'Ъ' => '', 'Э' => 'E', 'Ю' => 'Yu', 'Я' => 'Ya', ); $new = ''; $file = pathinfo(trim($filename)); if (!empty($file['dirname']) && @$file['dirname'] != '.') < $new .= rtrim($file['dirname'], '/') . '/'; >if (!empty($file['filename'])) < $file['filename'] = str_replace(array(' ', ','), '-', $file['filename']); $file['filename'] = strtr($file['filename'], $converter); $file['filename'] = mb_ereg_replace('[-]+', '-', $file['filename']); $file['filename'] = trim($file['filename'], '-'); $new .= $file['filename']; >if (!empty($file['extension'])) < $new .= '.' . $file['extension']; >return $new; > echo translit_file('/upload/Пример файла.jpg');

Результат:

Источник

helart / php-translit-file.php

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

function translit_file($filename)
$converter = array(
‘а’ = > ‘a’, ‘б’ = > ‘b’, ‘в’ = > ‘v’, ‘г’ = > ‘g’, ‘д’ = > ‘d’,
‘е’ = > ‘e’, ‘ё’ = > ‘e’, ‘ж’ = > ‘zh’, ‘з’ = > ‘z’, ‘и’ = > ‘i’,
‘й’ = > ‘y’, ‘к’ = > ‘k’, ‘л’ = > ‘l’, ‘м’ = > ‘m’, ‘н’ = > ‘n’,
‘о’ = > ‘o’, ‘п’ = > ‘p’, ‘р’ = > ‘r’, ‘с’ = > ‘s’, ‘т’ = > ‘t’,
‘у’ = > ‘u’, ‘ф’ = > ‘f’, ‘х’ = > ‘h’, ‘ц’ = > ‘c’, ‘ч’ = > ‘ch’,
‘ш’ = > ‘sh’, ‘щ’ = > ‘sch’, ‘ь’ = > », ‘ы’ = > ‘y’, ‘ъ’ = > »,
‘э’ = > ‘e’, ‘ю’ = > ‘yu’, ‘я’ = > ‘ya’,
‘А’ = > ‘A’, ‘Б’ = > ‘B’, ‘В’ = > ‘V’, ‘Г’ = > ‘G’, ‘Д’ = > ‘D’,
‘Е’ = > ‘E’, ‘Ё’ = > ‘E’, ‘Ж’ = > ‘Zh’, ‘З’ = > ‘Z’, ‘И’ = > ‘I’,
‘Й’ = > ‘Y’, ‘К’ = > ‘K’, ‘Л’ = > ‘L’, ‘М’ = > ‘M’, ‘Н’ = > ‘N’,
‘О’ = > ‘O’, ‘П’ = > ‘P’, ‘Р’ = > ‘R’, ‘С’ = > ‘S’, ‘Т’ = > ‘T’,
‘У’ = > ‘U’, ‘Ф’ = > ‘F’, ‘Х’ = > ‘H’, ‘Ц’ = > ‘C’, ‘Ч’ = > ‘Ch’,
‘Ш’ = > ‘Sh’, ‘Щ’ = > ‘Sch’, ‘Ь’ = > », ‘Ы’ = > ‘Y’, ‘Ъ’ = > »,
‘Э’ = > ‘E’, ‘Ю’ = > ‘Yu’, ‘Я’ = > ‘Ya’,
);
$new = »;
$file = pathinfo(trim($filename));
if (!empty($file[‘dirname’]) && @$file[‘dirname’] != ‘.’)
$new .= rtrim($file[‘dirname’], ‘/’) . ‘/’;
>
if (!empty($file[‘filename’]))
$file[‘filename’] = str_replace(array(‘ ‘, ‘,’), ‘-‘, $file[‘filename’]);
$file[‘filename’] = strtr($file[‘filename’], $converter);
$file[‘filename’] = mb_ereg_replace(‘[-]+’, ‘-‘, $file[‘filename’]);
$file[‘filename’] = trim($file[‘filename’], ‘-‘);
$new .= $file[‘filename’];
>
if (!empty($file[‘extension’]))
$new .= ‘.’ . $file[‘extension’];
>
return $new;
>
echo translit_file(‘/upload/Пример файла.jpg’);
// Результат /upload/Primer-fayla.jpg

Источник

Транслитерация по ГОСТ

PHP функции для транслита текста на русском языке по ГОСТ 7.79-2000 (ИСО 9-95) система «Б»*.

Кириллическая Латинская Кириллическая Латинская
А A а a
Б B б b
В V в v
Г G г g
Д D д d
Е E е e
Ё Yo ё yo
Ж Zh ж zh
З Z з z
И I и i
Й J й j
К K к k
Л L л l
М M м m
Н N н n
О O о o
П P п p
Р R р r
С S с s
Т T т t
У U у u
Ф F ф f
Х X х x
Ц Cz ц cz
Ч Ch ч ch
Ш Sh ш sh
Щ Shh щ shh
Ъ « ъ «
Ы Y` ы y`
Ь ` ь `
Э E` э e`
Ю Yu ю yu
Я Ya я ya
function translit($value) < $converter = array( 'А' =>'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D', 'Е' => 'E', 'Ё' => 'Yo', 'Ж' => 'Zh', 'З' => 'Z', 'И' => 'I', 'Й' => 'J', 'К' => 'K', 'Л' => 'L', 'М' => 'M', 'Н' => 'N', 'О' => 'O', 'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T', 'У' => 'U', 'Ф' => 'F', 'Х' => 'X', 'Ц' => 'Cz', 'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Shh', 'Ъ' => '``', 'Ы' => 'Y`', 'Ь' => '`', 'Э' => 'E`', 'Ю' => 'Yu', 'Я' => 'Ya', 'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'yo', 'ж' => 'zh', 'з' => 'z', 'и' => 'i', 'й' => 'j', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'x', 'ц' => 'cz', 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'shh', 'ъ' => '``', 'ы' => 'y`', 'ь' => '`', 'э' => 'e`', 'ю' => 'yu', 'я' => 'ya' ); $value = strtr($value, $converter); return $value; > echo translit('Съешь же ещё этих мягких французских булок, да выпей чаю.');

Результат

S``esh` zhe eshhyo e`tix myagkix franczuzskix bulok, da vy`pej chayu.

Обратный перевод текста

Ретранслитерация производится в 3 этапа:

Латинская Кириллическая Латинская Кириллическая
Трехбуквенные сочетания
Shh Щ shh щ
Двухбуквенные сочетания
Yo Ё yo ё
Zh Ж zh ж
Cz Ц cz ц
Ch Ч ch ч
Sh Ш sh ш
« Ъ « ъ
Y` Ы y` ы
E` Э e` э
Yu Ю yu ю
Ya Я ya я
Однобуквенные соответствия
A А a а
B Б b б
V В v в
G Г g г
D Д d д
E Е e е
Z З z з
I И i и
J Й j й
K К k к
L Л l л
M М m м
N Н n н
O О o о
P П p п
R Р r р
S С s с
T Т t т
U У u у
F Ф f ф
X Х x х
` Ь ` ь
function untranslit($value) < $step_1 = array( 'SHH' =>'Щ', 'Shh' => 'Щ', 'shh' => 'щ' ); $value = strtr($value, $step_1); $step_2 = array( 'YO' => 'Ё', 'ZH' => 'Ж', 'CZ' => 'Ц', 'CH' => 'Ч', 'SH' => 'Ш', 'Y`' => 'Ы', 'E`' => 'Э', 'YU' => 'Ю', 'YA' => 'Я', 'Yo' => 'Ё', 'Zh' => 'Ж', 'Cz' => 'Ц', 'Ch' => 'Ч', 'Sh' => 'Ш', 'Yu' => 'Ю', 'Ya' => 'Я', 'yo' => 'ё', 'zh' => 'ж', 'cz' => 'ц', 'ch' => 'ч', 'sh' => 'ш', 'y`' => 'ы', 'e`' => 'э', 'yu' => 'ю', 'ya' => 'я', '``' => 'ъ', ); $value = strtr($value, $step_2); $step_3 = array( 'A' => 'А', 'B' => 'Б', 'V' => 'В', 'G' => 'Г', 'D' => 'Д', 'E' => 'Е', 'Z' => 'З', 'I' => 'И', 'J' => 'Й', 'K' => 'К', 'L' => 'Л', 'M' => 'М', 'N' => 'Н', 'O' => 'О', 'P' => 'П', 'R' => 'Р', 'S' => 'С', 'T' => 'Т', 'U' => 'У', 'F' => 'Ф', 'X' => 'Х', 'a' => 'а', 'b' => 'б', 'v' => 'в', 'g' => 'г', 'd' => 'д', 'e' => 'е', 'z' => 'з', 'i' => 'и', 'j' => 'й', 'k' => 'к', 'l' => 'л', 'm' => 'м', 'n' => 'н', 'o' => 'о', 'p' => 'п', 'r' => 'р', 's' => 'с', 't' => 'т', 'u' => 'у', 'f' => 'ф', 'x' => 'х', '`' => 'ь', ); $value = strtr($value, $step_3); return $value; > echo untranslit('S``esh` zhe eshhyo e`tix myagkix franczuzskix bulok, da vy`pej chayu.');

Результат

Съешь же ещё этих мягких французских булок, да выпей чаю.

Источник

Оцените статью