Start · Sprachen · PHP · Referenz · transliterator_create_from_rules

transliterator_create_from_rules

Funktion

Erstellt ein <code>Transliterator</code>-Objekt anhand benutzerdefinierter ICU-Transliterationsregeln.

seit PHP 5.4.0 Kategorie: string

Signatur

transliterator_create_from_rules(string $rules, int $direction = Transliterator::FORWARD): Transliterator|false|null

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

Typ
Transliterator|false|null
Beschreibung
Gibt ein 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;
}
xpply

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;
Schoene Gruesse Schöne Grüße

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');
}
H**** W**** 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.