php транслит с русского на английский
PHP функция перевода в транслит translit()
Достаточно сложно сказать, какой вариант ЧПУ наиболее оптимален для поисковых систем и насколько это влияет на релевантность. В рамках данной статьи я решил опустить данный вопрос и предложить вашему вниманию готовую php-функцию перевода кириллицы (русского) в транслит, которую я использую в своих проектах.
Нюансы перевода в транслит
PHP-функция translit()
Всё выше сказанное, по крайней мере, в упрощенном виде, реализовано в используемой мной функции перевода в транслит, вот её php-код:
Как Вы видите, я постарался дать комментарии ко всем осуществляемым здесь действиям. При желании Вы можете отказаться от чего-то из предложенного, дополнить или изменить существующие. В любом случае данная php-функция перевода в транслит, как по мне, наиболее оптимальна.
Коротко о транслитерации
Процесс транслитерации имеет массу особенностей. В своей статье я остановился именно на переводе кириллицы в транслит, т.е. русский текст набранный латинскими буквами. Предложенный вариант 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 Удалить комментарий
так как после удаления недопустимых символов возникают двойные, тройные и т.д. пробелы
а в целом хорошая функция получилась, вычищает разный мусор и делает всё красиво! 😉
24 января 2015 г., 0:48 Удалить комментарий
Спасибо большое. часть вашего кода мне очень помогла.
28 октября 2015 г., 12:18 Удалить комментарий
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 Удалить комментарий
12 апреля 2017 г., 20:34 Удалить комментарий
Благослови Вас бог. Я чуть не потратил кучу времени.
Транслит (PHP)
Создавая функцию автоматического транслита с русского в английский, нужно думать прежде всего о том, чтобы этот транслит было удобно воспринимать при чтении. Поэтому лучше не делать попыток сделать «английский вариант» русской буквы уникальной.
С русского на английский
Самый простой и удобный вариант, создать 2 массив. Первый с русским алфавитом, второй с соответствующей каждой русской букве английской транслитерации.
Результат
В результате на экране вы увидите:
Категории
Читайте также
Комментарии
Наибольшие споры как до реформы 1917-18 годов, так и после нее вызывал вопрос, какое из двух кирилловских «и» следует сохранить в русском алфавите. Сторонники сохранения I-с-точкой обосновывали свое предложение тремя очень существенными аргументами: во-первых, желательностью приближения русского алфавита к западно-европейским; во-вторых, тем, что замена И-восьмеричного I-десятеричным дала бы вследствие меньшей ширины этой часто встречающейся буквы экономию около одного процента площади бумаги при письме и печати; в-третьих, гораздо лучшей различимостью I-с-точкой: И-восьмеричное слишком похоже по своей форме на другие русские буквы (Н, К, П, Л). Несмотря на эти аргументы, победу одержали сторонники И-восьмеричного, ссылавшиеся на то, что сохранение этой чаще применявшейся буквы приведет к меньшему изменению традиционной графики русского письма.
Совершенствование советских систем письма, построенных на кирилловской основе, в дальнйшем, видимо, должно пойти в четырех направлениях.
Во-первых, приближение ф
Транслитерация или транслит может понадобиться где угодно, например, для составления URL адресов. Часто транслитерация применяется в различных официальных документах и средствах – в обычных паспортах, в загранпаспортах, в международных удостоверениях, в банковских карточках и т.д. Иногда есть необходимость самому указать свои данные на транслите – для этого понадобится таблица с правилами перевода каждого символа в символ на другом языке.
Даже такими крупными организациями как банки, правильная транслитерация делается не всегда, например, на одной банковской карточке имя и фамилия могут быть написаны одним способом, а на другой карте уже по другим правилам. Также и в сети, там можно найти множество таблиц с правилами транслитерации, но как оказалось в них разные символы кодируются по-разному – нет единства транслитерации.
Поэтому потребовалось создать таблицу на основе правил транслитерации в популярных сервисах. В результате проведенного анализа был подготовлен полный алфавит с правилами транслитерации с русского языка на английский.
Полный алфавит транслитерации
Прописные | ||
---|---|---|
А => A | К => K | Х => H |
Б => B | Л => L | Ц => C |
В => V | М => M | Ч => CH |
Г => G | Н => N | Ш => SH |
Д => D | О => O | Щ => SHCH |
Е => E | П => P | Ъ => |
Ё => YO | Р => R | Ы => Y |
Ж => ZH | С => S | Ь => |
З => Z | Т => T | Э => E |
И => I | У => U | Ю => YU |
Й => Y | Ф => F | Я => YA |
Строчные | ||
а => a | к => k | х => h |
б => b | л => l | ц => c |
в => v | м => m | ч => ch |
г => g | н => n | ш => sh |
д => d | о => o | щ => shch |
е => e | п => p | ъ => |
ё => yo | р => r | ы => y |
ж => zh | с => s | ь => |
з => z | т => t | э => e |
и => i | у => u | ю => yu |
й => y | ф => f | я => ya |
Функция PHP для транслитерации
Ниже приводится готовая функция PHP для транслита с русского на английский. Она может быть полезна для транслитерации URL и не только, ее можно легко доработать под свои потребности.
Таким образом, используя вышеуказанные правила транслитерации или готовую функцию PHP из этой статьи, можно получить правильно транслитерированный текст, который будет совпадать с транслитерацией в популярных сервисах и системах.
Transliterator::transliterate
(PHP 5 >= 5.4.0, PHP 7, PHP 8, PECL intl >= 2.0.0)
Описание
Преобразует строку или её часть, используя транслитератор ICU.
Список параметров
Строка для транслитерации.
Начальный индекс, включительно, (в кодовых единицах UTF-16), с которого начинается часть строки, предназначенная для транслитерации. Индексация начинается с 0. Текст до этой позиции останется как есть.
Начальный индекс, не включая, (в кодовых единицах UTF-16), которым заканчивается часть строки, предназначенная для транслитерации. Индексация начинается с 0. Текст с этой позиции останется как есть.
Возвращаемые значения
Преобразованная строка в случае успешного выполнения или false в случае возникновения ошибки.
Примеры
Пример #1 Конвертация экранированной UTF-16 строки
Результатом выполнения данного примера будет что-то подобное:
Смотрите также
User Contributed Notes 5 notes
Sorry, for posting it again, but I found a bug in my code:
Here’s my new code, including an example:
var_dump(transliterator_transliterate(‘Any-Latin; Latin-ASCII; [\u0100-\u7fff] remove’,
«A æ Übérmensch på høyeste nivå! И я люблю PHP! есть. fi»));
// string(50) «A ae Ubermensch pa hoyeste niva! I a lublu PHP! est. fi»
Also an example here:
var_dump(iconv(«UTF-8», «ASCII//TRANSLIT//IGNORE», transliterator_transliterate(‘Any-Latin; Latin-ASCII’,
«A æ Übérmensch på høyeste nivå! И я люблю PHP! есть. fi»));
// string(50) «A ae Ubermensch pa hoyeste niva! I a lublu PHP! est’. fi»
You can create slugs easily with:
echo slugify ( «Я люблю PHP!» );
?>
There are some possibly undesirable conversions with ASCII//TRANSLIT//IGNORE or your users may require some custom stuff.
You might want to run a substitution up front for certain things, such as when you want 3 letter ISO codes to replace currency symbols. £ transliterates to «lb», for example, which is incorrect since it’s a currency symbol, not a weight symbol (#).
ASCII//TRANSLIT//IGNORE does a great job within the realm of possibility 🙂
When it doesn’t do something you want it to, you can set up a CSV with one replacement per line and run a function like:
or you can write some regexes. Transliterating using ASCII//TRANSLIT//IGNORE works so well that your map probably won’t be very long.
= ‘àáâãäçèéêëìíîïñòóôõöùúûüýÿ
ÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ’ ;
$rule = ‘NFD; [:Nonspacing Mark:] Remove; NFC’ ;
Русский текст в транслит на PHP
Например, если имя «Михаил«, то логин должен быть «mihail«. Если такой логин уже занят, то тогда логин «mihail1«, если и он уже занят, то «mihail2» и так далее до свободного. Теперь, собственно, возвращаемся к теме статьи. Вот простейшая функция, которая переводит русский текст в транслит:
Думаю, что здесь код очень прозрачный: есть 2 массива с одинаковым числом элементов. В первом массиве буквы русского алфавита, а во втором в соответствующих позициях их написание в транслите. Затем идёт обычная замена с помощью функции str_replace() и возврат результата.
Вот таким образом делается перевод русского текста в транслит на PHP.
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Комментарии ( 6 ):
Еще есть такая полезная функция как strtr
Смысле, Вы хотите, чтобы полученные данные были переведены в транслит?
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2021 Русаков Михаил Юрьевич. Все права защищены.