// Translit each and every char to ASCII$string = 'Москва́';$string = Transliterator::create('Any-Latin; Latin-ASCII')->transliterate($string);print $string;// the result is "Moskva"
(PHP 5 >= 5.4.0, PHP 7, PHP 8, PECL intl >= 2.0.0)
Transliterator::create -- transliterator_create — Создать транслитератор
Объектно-ориентированный стиль
$id
, int $direction
= Transliterator::FORWARD): ?TransliteratorПроцедурный стиль
Открывает объект Transliterator по идентификатору.
Функцию пока не задокументировали; для знакомства доступен только список аргументов.
id
Идентификатор. Список всех зарегистрированных идентификаторов транслитератора можно получить с помощью Transliterator::listIDs().
direction
Направление транслитерации. По умолчанию >Transliterator::FORWARD. Можно использовать Transliterator::REVERSE.
Возвращает объект Transliterator или
null
в случае возникновения ошибки.
// Translit each and every char to ASCII$string = 'Москва́';$string = Transliterator::create('Any-Latin; Latin-ASCII')->transliterate($string);print $string;// the result is "Moskva"
A good example of create for non latin languages is Turkish.There both upper case I character and lowercase ı character which makes other strtolower kind of functions useless.$text = "Iğdır";echo Transliterator::create("tr-Lower")->transliterate($text);will return the correct result ığdır, not iğdır .
If you want to go deeper into what is going on, read the ICU projects docs: http://userguide.icu-project.org/transforms/generalThis API call is basically just wrapper around ICU Transliteration.
Here's the guide on rules that could be used: https://unicode-org.github.io/icu/userguide/transforms/general/#overview