аватар Автор: Сергей Касаткин | 31 августа 2013 21:06

Статьи / PHP /

Как сделать транслит русского текста или строки в PHP?

Транслит - это замена кириллических символов их аналогами в латиннице. Траслитерацию часто используют для создания ЧПУ (человеку-понятных-урлов) и для рассылки информации. И практически каждый программист сталкивался с задачей создания функции транслитерации текста. В данной статье предлагаю посмотреть решение проблемы того, как создать функцию траслита в PHP.

Для этого предлагаю простое и верное решение - создать массив, где каждый символ кириллицы (отдельно и для заглавных букв) будет преобразовываться в аналог из латинского алфавита.

Код PHP

function translitText($str) 
{
    $tr = array(
        "А"=>"A","Б"=>"B","В"=>"V","Г"=>"G",
        "Д"=>"D","Е"=>"E","Ё"=>"E","Ж"=>"J","З"=>"Z","И"=>"I",
        "Й"=>"Y","К"=>"K","Л"=>"L","М"=>"M","Н"=>"N",
        "О"=>"O","П"=>"P","Р"=>"R","С"=>"S","Т"=>"T",
        "У"=>"U","Ф"=>"F","Х"=>"H","Ц"=>"TS","Ч"=>"CH",
        "Ш"=>"SH","Щ"=>"SCH","Ъ"=>"","Ы"=>"YI","Ь"=>"",
        "Э"=>"E","Ю"=>"YU","Я"=>"YA","а"=>"a","б"=>"b",
        "в"=>"v","г"=>"g","д"=>"d","е"=>"e","ё"=>"e","ж"=>"j",
        "з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
        "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
        "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
        "ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y",
        "ы"=>"yi","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya"
    );
    return strtr($str,$tr);
}

Применить функцию достаточно легко. Надеюсь, что все понимают, однако на всякий случай приведу пример.

Код PHP

$text = "Текст"; // Любая переменная с текстом
$translit = translitText($text); // заменят символы в переменной
echo $translit; // выведет 'tekst'


Как сделать транслит URL в PHP?


Поскольку предыдущая функция решает общие задачи, то предлагаю рассмотреть специализированную - для создания ЧПУ, как упоминал выше, понятного человеку урла. В результате адрес страницы имеет вид:
adres-stranicy, а лишние символы убираются. Очень нужная вещь!

Код PHP

function translitURL($str) 
{
    $tr = array(
        "А"=>"a","Б"=>"b","В"=>"v","Г"=>"g",
        "Д"=>"d","Е"=>"e","Ё"=>"e","Ж"=>"j","З"=>"z","И"=>"i",
        "Й"=>"y","К"=>"k","Л"=>"l","М"=>"m","Н"=>"n",
        "О"=>"o","П"=>"p","Р"=>"r","С"=>"s","Т"=>"t",
        "У"=>"u","Ф"=>"f","Х"=>"h","Ц"=>"ts","Ч"=>"ch",
        "Ш"=>"sh","Щ"=>"sch","Ъ"=>"","Ы"=>"yi","Ь"=>"",
        "Э"=>"e","Ю"=>"yu","Я"=>"ya","а"=>"a","б"=>"b",
        "в"=>"v","г"=>"g","д"=>"d","е"=>"e","ё"=>"e","ж"=>"j",
        "з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
        "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
        "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
        "ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y",
        "ы"=>"yi","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya", 
        " -"=> "", ","=> "", " "=> "-", "."=> "", "/"=> "_", 
        "-"=> ""
    );
    return strtr($str,$tr);
}

if (preg_match('/[^A-Za-z0-9_\-]/', $urlstr)) {
    $urlstr = translitURL($urlstr);
    $urlstr = preg_replace('/[^A-Za-z0-9_\-]/', '', $urlstr);
}

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

Спасибо за внимание! И помните: выше рейтинг в поисковых системах у той страницы, у которой ключевые слова содержатся уже в адресе (URL).
 



Похожие статьи


Комментарии к статье (vk.com)