W3docs

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) : string

Hier 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) : string

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

php— editable, runs on the server

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 fox

Ersetzungen 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 c

Auch 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 WOrLd

Jedes 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 mehrzeichen­lange 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 Ersetzung str_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.

Übungen

Übung
Was ist der Zweck der strtr-Funktion in PHP?
Was ist der Zweck der strtr-Funktion in PHP?
Was this page helpful?