Signatur
Beschreibung
transliterator_create() ist die prozedurale Variante von Transliterator::create() und erzeugt ein Objekt, mit dem Zeichenketten nach ICU-Transliterationsregeln umgewandelt werden können. Typische Anwendungsfälle sind die Umschrift von Kyrillisch oder Arabisch in lateinische Zeichen, die Entfernung von Diakritika (z. B. Akzente) oder die Normalisierung von Unicode-Text.
Der Parameter $id akzeptiert entweder eine vordefinierte ICU-Transliterations-ID (z. B. 'Any-Latin', 'Latin-ASCII', 'NFD; [:Nonspacing Mark:] Remove; NFC') oder eine selbst formulierte ICU-Regelzeichenkette. Die verfügbaren IDs lassen sich über Transliterator::listIDs() abrufen.
Mit dem optionalen Parameter $direction kann die Richtung der Transliteration gesteuert werden: Transliterator::FORWARD (Vorwärts, Standard) oder Transliterator::REVERSE (Rückwärts, sofern die Regeln dies unterstützen).
Nach dem Erstellen des Objekts wird die eigentliche Umwandlung mit transliterator_transliterate() bzw. Transliterator::transliterate() durchgeführt. Diese Funktion setzt die PHP-Erweiterung intl voraus.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $id Pflicht | string | Eine ICU-Transliterations-ID (z. B. 'Any-Latin') oder eine benutzerdefinierte ICU-Regelzeichenkette, die das Transliterationsverhalten beschreibt. |
|
| $direction | int | Transliterator::FORWARD | Richtung der Transliteration: Transliterator::FORWARD (vorwärts, Standard) oder Transliterator::REVERSE (rückwärts). |
Rückgabewert
Transliterator-Objekt zurück. Im Fehlerfall (z. B. ungültige ID oder fehlende intl-Erweiterung) wird null zurückgegeben und ein Fehler ausgelöst.Beispiele
Kyrillischen Text in lateinische Zeichen umschreiben
<?php
$transliterator = transliterator_create('Any-Latin');
if ($transliterator === null) {
die('Transliterator konnte nicht erstellt werden.');
}
$russisch = 'Привет, мир!';
$latein = transliterator_transliterate($transliterator, $russisch);
echo $latein;
Diakritika entfernen (Akzente normalisieren)
<?php
// NFD zerlegt Zeichen, dann werden Combining Marks entfernt, NFC normalisiert erneut
$transliterator = transliterator_create('NFD; [:Nonspacing Mark:] Remove; NFC');
if ($transliterator === null) {
die('Transliterator konnte nicht erstellt werden.');
}
$text = 'Héllo Wörld – Ñoño';
$normiert = transliterator_transliterate($transliterator, $text);
echo $normiert;
Unicode-Text in ASCII-kompatible Zeichen umwandeln
<?php
// Kombinierte Regel: erst Any-Latin, dann Latin zu ASCII
$transliterator = transliterator_create('Any-Latin; Latin-ASCII');
if ($transliterator === null) {
die('Transliterator konnte nicht erstellt werden.');
}
$text = 'Ärger mit Ümlauten und Ößerreich';
$ascii = transliterator_transliterate($transliterator, $text);
echo $ascii;
// Wichtig · Fallstricke
Voraussetzung: Die PHP-Erweiterung intl muss installiert und aktiviert sein (extension=intl in der php.ini). Andernfalls ist die Funktion nicht verfügbar.
Fehlerbehandlung: Bei einem ungültigen $id-Wert gibt die Funktion null zurück und erzeugt einen E_WARNING. Zusätzliche Fehlerdetails sind über intl_get_error_message() abrufbar.
Rückwärts-Transliteration: Nicht alle Transliteratoren unterstützen Transliterator::REVERSE. Bei nicht umkehrbaren Regelmengen schlägt die Erstellung fehl.
Performance: Das Erstellen eines Transliterator-Objekts ist vergleichsweise aufwändig. Bei wiederholter Verwendung sollte das Objekt gecacht oder als Klassenmember gespeichert werden.