Signatur
Beschreibung
transliterator_create_from_rules() ermöglicht es, einen Transliterator auf Basis eigener ICU-Regelstrings zu erzeugen, anstatt einen der vordefinierten Transliteratoren (wie Any-Latin) zu verwenden. Damit lassen sich beliebige zeichenbasierte Transformationen – etwa Ersetzungen, Umsortierungen oder Normalisierungen – exakt nach eigenen Anforderungen definieren.
Die Regeln folgen der ICU-Regel-Syntax. Eine einfache Regel sieht z. B. so aus: a > b; (ersetze a durch b). Regeln werden durch Semikolons getrennt, und es können Variablen, Unicode-Bereiche sowie Kontextbedingungen genutzt werden.
Der optionale Parameter $direction steuert, ob die Transformation vorwärts (Transliterator::FORWARD) oder rückwärts (Transliterator::REVERSE) angewendet wird. Für Rückwärtstransformation müssen die Regeln bidirektional formuliert sein, also mit dem <>-Operator.
Die Funktion gibt bei Erfolg ein Transliterator-Objekt zurück, das anschließend über transliterator_transliterate() oder die Methode Transliterator::transliterate() genutzt werden kann. Bei einem Fehler wird null oder false zurückgegeben.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $rules Pflicht | string | Ein String mit ICU-Transliterationsregeln. Mehrere Regeln werden durch Semikolons getrennt, z. B. a > b; c > d;. |
|
| $direction | int | Transliterator::FORWARD | Richtung der Transliteration: Transliterator::FORWARD (Standard, vorwärts) oder Transliterator::REVERSE (rückwärts, sofern die Regeln bidirektionale Operatoren verwenden). |
Rückgabewert
Transliterator-Objekt zurück, wenn die Regeln erfolgreich geparst wurden. Gibt null zurück, wenn ein Fehler beim Parsen der Regeln auftritt (und Fehlerinformationen über intl_get_error_message() abrufbar sind). In manchen Fehlerszenarien kann auch false zurückgegeben werden.Beispiele
Einfache Zeichenersetzung mit eigenen Regeln
<?php
// Erstelle einen Transliterator, der 'a' durch 'x' und 'e' durch 'y' ersetzt
$rules = 'a > x; e > y;';
$trans = transliterator_create_from_rules($rules);
if ($trans === null || $trans === false) {
echo 'Fehler: ' . intl_get_error_message();
} else {
$result = transliterator_transliterate($trans, 'apple');
echo $result;
}
Bidirektionale Regeln mit Rückwärtstransformation
<?php
// Bidirektionale Regel: Vorwärts: ä > ae, Rückwärts: ae > ä
$rules = 'ä <> ae; ö <> oe; ü <> ue;';
$forward = transliterator_create_from_rules($rules, Transliterator::FORWARD);
$reverse = transliterator_create_from_rules($rules, Transliterator::REVERSE);
$original = 'Schöne Grüße';
$encoded = transliterator_transliterate($forward, $original);
$decoded = transliterator_transliterate($reverse, $encoded);
echo $encoded . PHP_EOL;
echo $decoded . PHP_EOL;
Verwendung von Unicode-Bereichen und Variablen
<?php
// Alle lateinischen Kleinbuchstaben durch '*' ersetzen
$rules = '$lower = [a-z]; $lower > *;';
$trans = transliterator_create_from_rules($rules);
if ($trans) {
echo transliterator_transliterate($trans, 'Hello World 123');
}
// Wichtig · Fallstricke
Fehlerbehandlung: Ungültige oder syntaktisch fehlerhafte Regelstrings führen zu einem null-Rückgabewert. Überprüfe den Rückgabewert stets und verwende intl_get_error_message() sowie intl_get_error_code(), um detaillierte Fehlerinformationen zu erhalten.
Erweiterung: Diese Funktion setzt die aktivierte intl-Erweiterung voraus, die auf ICU aufbaut. Die verfügbaren Regelsyntax-Features hängen von der installierten ICU-Version ab – prüfe diese ggf. mit INTL_ICU_VERSION.
Prozedural vs. OOP: Diese prozedurale Funktion ist äquivalent zu Transliterator::createFromRules(). Im OOP-Stil empfiehlt sich die Verwendung der statischen Methode.