PHP функция перевода в транслит translit()

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

PHP функция перевода в транслит translit()

Нюансы перевода в транслит

Но перед тем как представить php-код самой функции, нам понадобится уточнить пару моментов. Начнём с того, что предложенный вариант основан на использовании массива перевода функцией strtr(). Таким образом, частично решается проблема с кодировкой, но набор кириллических (русских) букв зависим от кодировки файла, где будет расположена функция.

Следующий момент связан с передаваемой функции строкой. Эта строка может состоять из символов разного регистра, содержать HTML-код и повторяющие пробелы и т.д. Очевидно, что для преобразования в полноценный ЧПУ понадобится произвести дополнительную фильтрацию строки, а пробелы заменить, на тот же символ «минус» (-).

PHP-функция translit()

Всё выше сказанное, по крайней мере, в упрощенном виде, реализовано в используемой мной функции перевода в транслит, вот её php-код:

function translit($s) {
  $s = (string) $s; // преобразуем в строковое значение
  $s = strip_tags($s); // убираем HTML-теги
  $s = str_replace(array("\n", "\r"), " ", $s); // убираем перевод каретки
  $s = preg_replace("/\s+/", ' ', $s); // удаляем повторяющие пробелы
  $s = trim($s); // убираем пробелы в начале и конце строки
  $s = function_exists('mb_strtolower') ? mb_strtolower($s) : strtolower($s); // переводим строку в нижний регистр (иногда надо задать локаль)
  $s = strtr($s, array('а'=>'a','б'=>'b','в'=>'v','г'=>'g','д'=>'d','е'=>'e','ё'=>'e','ж'=>'j','з'=>'z','и'=>'i','й'=>'y','к'=>'k','л'=>'l','м'=>'m','н'=>'n','о'=>'o','п'=>'p','р'=>'r','с'=>'s','т'=>'t','у'=>'u','ф'=>'f','х'=>'h','ц'=>'c','ч'=>'ch','ш'=>'sh','щ'=>'shch','ы'=>'y','э'=>'e','ю'=>'yu','я'=>'ya','ъ'=>'','ь'=>''));
  $s = preg_replace("/[^0-9a-z-_ ]/i", "", $s); // очищаем строку от недопустимых символов
  $s = str_replace(" ", "-", $s); // заменяем пробелы знаком минус
  return $s; // возвращаем результат
}

Как Вы видите, я постарался дать комментарии ко всем осуществляемым здесь действиям. При желании Вы можете отказаться от чего-то из предложенного, дополнить или изменить существующие. В любом случае данная php-функция перевода в транслит, как по мне, наиболее оптимальна.

Коротко о транслитерации

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

Ну, и т.к. мы заговорили о ЧПУ, следует также сказать и о полноценном переводе. Очевидно, что реализация такого варианта собственными силами не будет простой, а значит более правильно будет воспользоваться сторонним сервисом, например, Google переводчиком. Если данная тема Вам интересна, рекомендую ознакомиться с моей PHP-функцией многоязычного перевода gtranslate().

На этом у меня всё. Спасибо за внимание. Удачи!