Start · Sprachen · PHP · Referenz · transliterator_transliterate

transliterator_transliterate

Funktion

Transliteriert einen String anhand eines ICU-Transliterators (oder einer Transliterations-ID) und gibt das Ergebnis zurück.

seit PHP 5.4.0 Kategorie: string

Signatur

transliterator_transliterate(Transliterator|string $transliterator, string $string, int $start = 0, int $end = -1): string|false

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 false zurü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

Typ
string|false
Beschreibung
Gibt den transliterierten String zurück oder 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!
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;
hello-world-unicode-text

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;
}
Ελληνικά => Ellenika العربية => alrbyt 日本語 => Ri Ben Yu Ñoño => Nono

// 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.