Функция транслит в php
Русский текст в транслит на PHP
Например, если имя «Михаил«, то логин должен быть «mihail«. Если такой логин уже занят, то тогда логин «mihail1«, если и он уже занят, то «mihail2» и так далее до свободного. Теперь, собственно, возвращаемся к теме статьи. Вот простейшая функция, которая переводит русский текст в транслит:
Думаю, что здесь код очень прозрачный: есть 2 массива с одинаковым числом элементов. В первом массиве буквы русского алфавита, а во втором в соответствующих позициях их написание в транслите. Затем идёт обычная замена с помощью функции str_replace() и возврат результата.
Вот таким образом делается перевод русского текста в транслит на PHP.
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Комментарии ( 6 ):
Еще есть такая полезная функция как strtr
Смысле, Вы хотите, чтобы полученные данные были переведены в транслит?
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2021 Русаков Михаил Юрьевич. Все права защищены.
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: Функция транслита

Впрочем одним ЧПУ можно не ограничиваться, а пойти гораздо дальше. И конвертировать например, все ники пользователей на сайте, написанные на русском. Да, вы не поверите, но именно с такими просьбами ко мне обращаются «админы» периодически.
Не буду утомлять своими рассуждениями. Представляю вам функцию generate_chpu;
Полезная и не заменимая фишка для поискового SEO, вашего сайта. Думая с установкой и подключением разберетесь самостоятельно. (Хотя блог в большинстве читают новички)
Похожие записи
3 комментария to “PHP: Функция транслита”
Спасибо, а он будет слеши убирать? И есть ли какие-нибудь подводные камни? С кодировкой может проблемы или еще что? Я себе сделал, пока проблем нет.
Да слеши убирает, проблем с кодировкой быть не должно.
в converter’e большие буквы не сильно и помогут, всё равно всё в нижний регистр переводится.
а так реализация понравилась, у меня чуть по-другому было. этот вариант лучше, хоть и оставляет в результате возможность повторение — и _ много раз подряд
(если —— было в основной строке).
Оставить комментарий
Друзья, всем привет!
Меня зовут Роман Чернышов, я веб-разработчик и данный блог посвящен моим проектам и бизнесу.
Тут я делюсь личным опытом
и отвечаю на вопросы. Я всегда готов к сотрудничеству с вами, готов реализовать проект любой сложности( опыт 10+ лет ).
Функция для транслитерации url на php
При создании сайтов и в веб-программировании транслитерация применяется чуть ли не в каждом сайте. Любой url-адрес или файл на сервере для удобства доступа к нему, как правило, записывается латинскими буквами. Поэтому применяется транслитерация для преобразования слов на других языках в аналогичные последовательности латинских букв. В частности, транслитерация применяется для преобразования кириллических букв в транслит.
С другой стороны в русском алфавите используется 33 буквы, а в английском всего лишь 26, и поэтому закодировать все русские буквы одной латинской буквой не получится. Для этого следует использовать две-три буквы или специальные символы. Иначе обратное преобразование из транслита в оригинальный текст без потерь будет невозможна.
Когда-то я задавал себе все эти вопросы и решил найти свой наиболее оптимальный вариант транслитерации русских букв в латиницу. Когда-то ещё на заре появления мобильных технологий мне попалась одна небольшая книжечка от сервиса БиОнЛайн, где и приводилась таблица соответствия букв русского и английского алфавитов. Не сложно догадаться, что при отправке SMS тоже очень часто применяется транслитерация. С точки зрения телекоммуникаций, чем меньше символов мы выделяем для передачи нашего сообщения, тем эффективнее наша система передачи.
| А | Б | В | Г | Д | Е | Ё |
| A | B | V | G | D | E | YO |
| Ж | З | И | Й | К | Л | М |
| ZH | Z | I | J | K | L | M |
| Н | О | П | Р | С | Т | У |
| N | O | P | R | S | T | U |
| Ф | Х | Ц | Ч | Ш | Щ | Ъ |
| F | H | TS | CH | SH | SCH | « |
| Ы | Ь | Э | Ю | Я | ||
| Y | ‘ | E | YU | YA |
В общем, так я решил использовать эту таблицу для транслитерации русских букв в латиницу.
Немного побродив по рунету я нашёл несколько сайтов, где были представлены алгоритмы преобразования в транслит на PHP. И выбрав из них всё самое лучшее и наиболее эффективное написал 3 функции для преобразования в транслит и обратно и для преобразования строки в валидный url-адрес.
Итак, ниже привожу листинг этих функций:
Функция для преобразования в транслит:
Функция для преобразования из транслита в обычный текст:
Функция для преобразования строки в валидный url-адрес:
Добавлю немного разъяснений как они работают.
Функции translit() и antitranslit() очень похожи и занимаются непосредственно заменой одних символов другими. На входе они принимают два параметра:
Естественно, массивы для преобразования одних символов другими можно изменить своими наборами символов. И это будут ещё другие варианты для получения транслитерации кириллического текста.
Вначале происходит преобразование HTML-сущностей в соответствующие символы функций html_entity_decode().
Далее происходит очистка строки от HTML-тегов и начальных/конечных пробелов функциями strip_tags и trim() соответственно.
Далее происходит преобразование регистра букв в нижний регистр функциями strtolower() или mb_strtolower() (для кодировки utf-8).
После выборки всех недопустимых символов функция preg_replace() их заменяет пустой строкой.
Далее та же функция preg_replase() заменяет все пробельные символы и дефисы одним дефисом. И после этого если в начале или в конце остался лишний дефис, то он удаляется функцией trim().
Для некоторых браузеров, например старых версий Internet Explorer максимальная длина url-адреса составляла 2048 байт. Хотя современные браузеры поддерживают url-запросы ещё большей длины, всё же лучше ограничить достаточно длинную строку конечным числом символов, чтобы избежать возможных ошибок и зависаний браузеров. Да и пользователю будет легче скопировать и передать более короткий url-адрес.
Поэтому функцией mb_strlen() вычисляем длину полученной строки и если она превышает 255 символов, отрезаем всё лишнее при помощи функции mb_substr().
В приложенном файле translit.php, который вы можете скачать по ссылкам ниже, приводятся примеры работы описанных функций транслитерации и приводятся ссылки на другие сайты по этой теме.
Если вы также пишете сайты на php или задаётесь вопросами о транслитерации, то думаю этот материал будет вам полезен. Пользуйтесь.
Вы вошли на сайт как Гость.
Транслитерация символов на PHP

В сети интернет транслитерация также используется довольно часто, как правило, там, где есть необходимость конвертации символов русского языка на английский. Одним из ярких примеров является ЧПУ, в них традиционно содержаться закладываются названия страниц, а так же отсекаются все лишние символы. Такая реализация URL адресов может положительно повлиять на продвижение страниц сайта в поисковых системах.
Рассмотрим довольно простой пример, который демонстрирует транслитерацию текста с русского на английский язык.
В данном примере, ключевым моментом является использование штатной функции PHP strtr, с посредством которой производится замена символов, а так же комбинаций символов. Более подробно возможность данной функции документирована в документации PHP, и при необходимости вы можете с ней разобраться более детально.
В примере выше строка транслитерируется таким образом, что для использования в URL лучше не оставлять символов пробела, а заменять знаком тире, либо нижним подчеркиванием. Исправим ситуацию, рассмотрим второй пример, который транслитерирует строку, таким образом, который необходим для использования в URL.
В данном примере реализованы две функции: translit и makeUrlCode. Функция translit производит транслитерацию строки, вторая функция makeUrlCode получая в качестве параметров строку, передает её функции translit, затем переводит результат в строку нижнего регистра, а так же удаляет/заменяет все ненужные символы. В итоге на выходе получается код, пригодный для использования его в URL.


