Signatur
Beschreibung
transliterator_transliterate() wendet eine ICU-Transliteration auf den angegebenen String an. Transliteration bezeichnet die Umschreibung von Zeichen oder Zeichenfolgen eines Schriftsystems in ein anderes – etwa von Kyrillisch nach Latein, von Griechisch nach ASCII oder von Unicode-Zeichen in ihre NFD/NFC-Normalformen. Die Funktion ist besonders hilfreich, wenn Texte aus verschiedenen Sprachräumen in einem einheitlichen Schriftsystem dargestellt werden sollen.
Als erster Parameter kann entweder ein Transliterator-Objekt (erstellt z. B. mit Transliterator::create()) oder direkt eine ICU-Transliterations-ID als String übergeben werden – beispielsweise 'Any-Latin', 'Latin-ASCII' oder Kombinationen davon wie 'Any-Latin; Latin-ASCII; Lower()'. Die optionalen Parameter $start und $end begrenzen die Transliteration auf einen Teilbereich des Strings (als Byte-Positionen in der UTF-8-Darstellung).
Die Funktion ist Teil der intl-Erweiterung (International Components for Unicode) und setzt voraus, dass diese in PHP aktiviert ist. Sie arbeitet korrekt mit UTF-8-Strings und unterstützt das vollständige Unicode-Repertoire. Gerade für SEO-freundliche URL-Slugs, Dateinamen oder die Normalisierung von Benutzereingaben ist sie ein wichtiges Werkzeug.
- Gibt bei Erfolg den transliterierten String zurück.
- Gibt
falsezurück und erzeugt einen Fehler, wenn die Transliteration fehlschlägt oder die ID ungültig ist.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $transliterator Pflicht | Transliterator|string | Ein Transliterator-Objekt oder eine ICU-Transliterations-ID als String (z. B. 'Any-Latin', 'Latin-ASCII' oder eine verkettete Regel wie 'Any-Latin; Latin-ASCII'). |
|
| $string Pflicht | string | Der zu transliterierende UTF-8-kodierte Eingabe-String. | |
| $start | int | 0 | Optionale Start-Position (Byte-Offset in UTF-8) innerhalb des Strings, ab der die Transliteration beginnen soll. Zeichen vor dieser Position werden unverändert übernommen. |
| $end | int | -1 | Optionale End-Position (Byte-Offset in UTF-8, exklusiv) innerhalb des Strings, bis zu der die Transliteration angewendet wird. -1 bedeutet bis zum Ende des Strings. |
Rückgabewert
false, wenn ein Fehler aufgetreten ist (z. B. ungültige Transliterations-ID oder interner ICU-Fehler). Im Fehlerfall kann intl_get_error_message() weitere Informationen liefern.Beispiele
Kyrillisch nach Latein transliterieren
<?php
// Russischen Text in lateinische Umschrift umwandeln
$russisch = 'Привет, мир!';
$result = transliterator_transliterate('Any-Latin', $russisch);
echo $result;
// => Privet, mir!
URL-Slug aus Unicode-Text erstellen
<?php
// Mehrsprachigen Text in einen ASCII-Slug umwandeln
$titel = 'Héllo Wörld – Ünïcödé tëxt';
// Erst in Latein, dann in reines ASCII umschreiben, dann in Kleinbuchstaben
$translit = transliterator_transliterate('Any-Latin; Latin-ASCII; Lower()', $titel);
// Sonderzeichen durch Bindestrich ersetzen und mehrfache Bindestriche entfernen
$slug = preg_replace('/[^a-z0-9]+/', '-', $translit);
$slug = trim($slug, '-');
echo $slug;
Transliterator-Objekt vorab erstellen und wiederverwenden
<?php
// Transliterator-Objekt einmalig erstellen und mehrfach nutzen
$t = Transliterator::create('Any-Latin; Latin-ASCII');
$texte = ['Ελληνικά', 'العربية', '日本語', 'Ñoño'];
foreach ($texte as $text) {
$result = transliterator_transliterate($t, $text);
echo $text . ' => ' . $result . PHP_EOL;
}
// Wichtig · Fallstricke
Voraussetzung: Die intl-Erweiterung muss in PHP aktiviert sein (extension=intl in der php.ini). Fehlt sie, steht die Funktion nicht zur Verfügung.
Encoding: Der Eingabe-String muss UTF-8-kodiert sein. Andere Kodierungen führen zu falschen oder unvollständigen Ergebnissen. Im Zweifel vorher mit mb_convert_encoding() konvertieren.
Fehlerbehandlung: Bei ungültiger Transliterations-ID gibt die Funktion false zurück. Zusätzliche Fehlerinformationen liefern intl_get_error_code() und intl_get_error_message().
Performance: Wenn dieselbe Transliteration auf viele Strings angewendet wird, empfiehlt es sich, einmalig ein Transliterator-Objekt mit Transliterator::create() zu erzeugen und dieses wiederzuverwenden, anstatt bei jedem Aufruf die ID als String zu übergeben.