Транслитерация php с русского на английский

Транслитерация php с русского на английский

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

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

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

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

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

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

function translit($s) <
$s = (string) $s; // преобразуем в строковое значение
$s = strip_tags($s); // убираем HTML-теги
$s = str_replace(array("
", "
"), " ", $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-функция перевода в транслит, как по мне, наиболее оптимальна.

Читайте также:  Чему равен момент инерции стержня длиной l

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

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

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

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

По-моему это очень недоработанная транслитерация, применять где-то на практике ее будет сложно. Слово "объектив" у вас будет "obektiv", без указания смягчения буквы "б". Нормальные транслитераторы делают "ob’ektiv" или "objektiv"

2 декабря 2013 г., 11:25 Удалить комментарий

@plutov.by: приведенный пример транслитерации заточен под ЧПУ, а в нём символ одинарной кавычки не допустим, а точнее вызовет дополнительные проблемы.

2 декабря 2013 г., 11:29 Удалить комментарий

Тогда беру свои слова обратно, пропустил ЧПУ, это всё понедельник 🙂

2 декабря 2013 г., 11:31 Удалить комментарий

@plutov.by: не, в принципе, логично, но невозможно учесть все варианты, а транслит обычно используют именно под ЧПУ. 🙂

2 декабря 2013 г., 11:43 Удалить комментарий

Строку
$s = preg_replace("/s+/", ‘ ‘, $s); // удаляем повторяющие пробелы
надо ставить после
$s = preg_replace("/[^0-9a-z-_ ]/i", "", $s); // очищаем строку от недопустимых символов

так как после удаления недопустимых символов возникают двойные, тройные и т.д. пробелы

Читайте также:  Женщина блондинка со спины

а в целом хорошая функция получилась, вычищает разный мусор и делает всё красиво! 😉

24 января 2015 г., 0:48 Удалить комментарий

Спасибо большое. часть вашего кода мне очень помогла.

28 октября 2015 г., 12:18 Удалить комментарий

А как вывести результат в переменную $result или что-то подобное -?

12 ноября 2015 г., 17:07 Удалить комментарий

2Олег так функция возвращает значение, т. е. его можно присвоить переменной:

$result = translit(‘функция перевода в транслит’);

или вывести на экран:

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

12 ноября 2015 г., 17:09 Удалить комментарий

Спасибо за подсказку

14 ноября 2015 г., 17:03 Удалить комментарий

Чтобы не задавать локаль для strtolower($s), можно добавить соответствия для заглавных букв в array() и потом уже переводить в нижний регистрр

28 февраля 2016 г., 18:58 Удалить комментарий

2Алексей Можно, но это значительно увеличит размер массива.

1 марта 2016 г., 11:41 Удалить комментарий

Спасибо. Сэкономил ку-у-у-учу времени. Просто copy&paste и все работает!

18 сентября 2016 г., 3:25 Удалить комментарий

А могу я эту функцию вставить в обработчик формы, чтобы он в строку дополнительную загонял транслитом?

23 октября 2016 г., 21:19 Удалить комментарий

Я так делал для своих CMSок, что ЧПУ генерить.

23 октября 2016 г., 23:01 Удалить комментарий

Спасибо Автор 🙂 работает все оху. о)

11 декабря 2016 г., 16:57 Удалить комментарий

Я бы еще добавил ‘UTF-8’ в строку mb_strtolower($s, ‘UTF-8’) : strtolower($s, ‘UTF-8’);

23 февраля 2017 г., 15:55 Удалить комментарий

3 марта 2017 г., 18:37 Удалить комментарий

Спасибо. Отличная функция. Ооочень помогла!

24 марта 2017 г., 14:52 Удалить комментарий

Стоит еще заменить "/" на "-"
$s = preg_replace("///", ‘-‘, $s); // заменяем "/" на "-"

12 апреля 2017 г., 20:34 Удалить комментарий

Благослови Вас бог. Я чуть не потратил кучу времени.

Читайте также:  Можно ли укоротить каблук на сапогах женских

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

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

Ниже примеры используемых мной функций:

Из Русского в Латиницу

Обратно — из Латиницы в Русский язык

или такой вариант

Согласно ГОСТам:

Для генерации логина лучше использовать эту функцию:

В соответствии с ГОСТ 7.79-2000 схема Б:

В соответствии с ISO 9 – 1995:

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

С русского на английский

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

Результат

В результате на экране вы увидите:

Категории

Читайте также

Комментарии

Наибольшие споры как до реформы 1917-18 годов, так и после нее вызывал вопрос, какое из двух кирилловских «и» следует сохранить в русском алфавите. Сторонники сохранения I-с-точкой обосновывали свое предложение тремя очень существенными аргументами: во-первых, желательностью приближения русского алфавита к западно-европейским; во-вторых, тем, что замена И-восьмеричного I-десятеричным дала бы вследствие меньшей ширины этой часто встречающейся буквы экономию около одного процента площади бумаги при письме и печати; в-третьих, гораздо лучшей различимостью I-с-точкой: И-восьмеричное слишком похоже по своей форме на другие русские буквы (Н, К, П, Л). Несмотря на эти аргументы, победу одержали сторонники И-восьмеричного, ссылавшиеся на то, что сохранение этой чаще применявшейся буквы приведет к меньшему изменению традиционной графики русского письма.
Совершенствование советских систем письма, построенных на кирилловской основе, в дальнйшем, видимо, должно пойти в четырех направлениях.
Во-первых, приближение ф

Ссылка на основную публикацию
Adblock detector