strtr()
Die PHP-Funktion strtr() übersetzt Zeichen und Teilstrings in einer Zeichenkette – nützlich für Textersetzung und Transliteration.
Einführung
Die Funktion strtr() in PHP übersetzt Teilstrings innerhalb einer Zeichenkette. Sie ist besonders nützlich für die Textverarbeitung, bei der bestimmte Sequenzen effizient ersetzt werden müssen. Dieser Artikel behandelt Syntax, Verhalten und praktische Anwendungsfälle.
Die strtr()-Funktion verstehen
Die Funktion strtr() unterstützt zwei Signaturen:
Array-Signatur
strtr(string $str, array $replace) : stringHier ist $str die Eingabezeichenkette und $replace ein assoziatives Array, das Teilstrings ihren Ersetzungen zuordnet. Die Funktion ersetzt alle Vorkommen der Schlüssel durch die entsprechenden Werte.
Drei-Argumente-Signatur
strtr(string $str, string $from, string $to) : stringIn dieser Form müssen $from und $to die gleiche Länge haben. Jedes Zeichen in $from wird dem Zeichen an derselben Position in $to zugeordnet.
Wichtiges Verhalten: strtr() ersetzt Teilstrings nach dem Prinzip „längste Übereinstimmung zuerst". Das bedeutet, überlappende Muster werden aufgelöst, indem die längste Übereinstimmung bevorzugt wird, und Ersetzungen werden nicht rekursiv auf die Ausgabe angewendet.
Array-Form: Teilstrings ersetzen
Die häufigste Verwendung von strtr() ist die zweiargumentige Array-Form. Man übergibt ein assoziatives Array, das jeden zu suchenden Teilstring dem Wert zuordnet, durch den er ersetzt werden soll.
Hier ersetzt strtr() jedes "H" durch "J" und jedes "W" durch "Z". Die Schlüssel können beliebig lang sein, sodass man genauso einfach ganze Wörter wie einzelne Zeichen zuordnen kann:
<?php
$string = "The quick brown fox";
echo strtr($string, ["quick" => "slow", "brown" => "red"]);
// Output: The slow red foxErsetzungen werden in einem einzigen Durchlauf angewendet
Das ist das Verhalten, das viele überrascht. strtr() durchsucht die Zeichenkette einmal und untersucht bereits ersetzten Text nie erneut. Ein eingefügter Wert wird also nicht durch eine andere Regel erneut gefunden:
<?php
echo strtr("Hi all, I said hello", ["Hi" => "Hello", "hello" => "hi"]);
// Output: Hello all, I said hi"Hi" wird zu "Hello", aber dieses neue "Hello" wird durch die zweite Regel nicht zu "hi" — die Ersetzung ist nicht rekursiv. Das macht strtr() sicher für das gegenseitige Tauschen zweier Werte (z. B. "yes" <-> "no"), was str_replace() in einem einzigen Aufruf nicht kann.
Längste Übereinstimmung gewinnt
Wenn zwei Schlüssel an derselben Position übereinstimmen könnten, bevorzugt strtr() stets den längeren:
<?php
echo strtr("a b c", ["a b" => "X", "a" => "Y"]);
// Output: X cAuch wenn "a" im Array zuerst erscheint, stimmt der längere Schlüssel "a b" an dieser Position überein und hat Vorrang. Die Reihenfolge im Array spielt keine Rolle — nur die Schlüssellänge zählt.
Drei-Argumente-Form: zeichenweise Übersetzung
Die Drei-Argumente-Form ordnet einzelne Zeichen zu. $from und $to müssen gleich lang sein; jedes Zeichen in $from wird durch das Zeichen an derselben Position in $to ersetzt.
<?php
echo strtr("Hello World", "lo", "LO");
// Output: HeLLO WOrLdJedes l wird zu L und jedes o zu O. Wenn $from länger als $to ist, werden die überzähligen Zeichen ignoriert. Diese Form eignet sich gut für einfache chiffre-ähnliche Tauschvorgänge oder die Normalisierung von Zeichen, kann jedoch nur einzelne Zeichen ersetzen — verwenden Sie die Array-Form, wenn Sie mehrzeichenlange Teilstrings ersetzen müssen.
strtr() vs. str_replace()
Beide Funktionen ersetzen Text, verhalten sich jedoch unterschiedlich:
strtr()arbeitet in einem einzigen nicht-rekursiven Durchlauf und löst Konflikte durch längste Übereinstimmung. Bereits ersetzter Text wird nie erneut durchsucht.str_replace()wendet seine Regeln sequenziell an, sodass eine frühere Ersetzung durch eine spätere erneut gefunden werden kann. Es ist außerdem Groß-/Kleinschreibung unterscheidend (für Großschreibungs-unabhängige Ersetzungstr_ireplace()verwenden).
Greifen Sie auf strtr() zurück, wenn Sie eine feste Zuordnung von Tauschvorgängen haben, die jeweils genau einmal erfolgen sollen — Escaping, Transliteration oder gegenseitige Tauschvorgänge. Für musterbasierte Ersetzungen verwenden Sie stattdessen preg_replace().
Fazit
Die Funktion strtr() bietet eine effiziente Möglichkeit, Teilstrings in PHP zu übersetzen. Sie unterstützt sowohl Array-basiertes Mapping als auch zeichenweise Übersetzung über die Drei-Argumente-Form. Da sie in einem einzigen Durchlauf nach dem Prinzip „längste Übereinstimmung zuerst" arbeitet, eignet sie sich hervorragend für einmalige Tauschvorgänge und ist oft schneller als verkettete str_replace()-Aufrufe. Das Verständnis der Einzeldurchlauf- und Längste-Übereinstimmung-Regeln hilft dabei, das richtige Werkzeug für jede Textverarbeitungsaufgabe zu wählen.