// 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 — Crea un Transliterator
Estilo orientado a objetos
$id, int $direction = Transliterator::FORWARD): ?TransliteratorEstilo procedimental
Abre un Transliterator por su identificador.
Esta función está actualmente no documentada; solo la lista de sus argumentos está disponible.
idEl identificador. Una lista de todos los identificadores transliterator registrados puede ser encontrada utilizando el método Transliterator::listIDs().
directionLa dirección, por omisión Transliterator::FORWARD. Puede ser igualmente definido como Transliterator::REVERSE.
Devuelve un objeto Transliterator en caso de éxito,
o null si ocurre un error.
// 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/general
This 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