Funktion strtr - Ein oder mehrere Zeichen im String austauschen

In PHP-Anwendungen enthalten Strings häufig ein oder mehrere Zeichen, die ausgetauscht werden sollen. Beispielsweise werden Seitennamen häufig aus dem Text im Titel oder in der Überschrift generiert und dabei werden Sonderzeichen oder Umlaute durch andere Zeichen ersetzt. Neben str_replace() oder str_ireplace() kann man auch die Funktion strtr() verwenden. Bei strtr() gibt es zwei verschiedene Möglichkeiten für die Übergabe der Parameter.

Mit Strings

  1. Der String, in dem das Austauschen von Zeichen erfolgen soll (string).
  2. Die Zeichen, die ersetzt werden sollen (from, string).
  3. Die Zeichen, mit denen ersetzt werden soll (to, string).

Mit Arrays

  1. Der String, in dem das Austauschen von Zeichen erfolgen soll (string).
  2. Das Suchen/Ersetzen Paar als Array (replace_pairs).

Beim Austauschen mit Strings sind die Positionen der angegebenen Zeichen in from und to ausschlaggebend. Das erste Zeichen in from wird durch das erste Zeichen in to ersetzt, das zweite Zeichen in from durch das zweite Zeichen in to etc. und das Schema gilt dementsprechend für die übrigen Zeichen.

Beim Austauschen mit Arrays wird das Ersetzungspaar in der Form array('A' => 'X', 'B' => 'Y') angegeben.

<?php

$str = 'A B C';

// Austauschen mit Strings
$from = 'ABC';
$to = 'XYZ';

// Ausgabe X Y Z
echo strtr($str, $from, $to);


// Ersetzungspaar als Array
$replace_pair = array('A' => 'X', 'B' => 'Y', 'C' => 'Z');

// Ausgabe X Y Z
echo strtr($str, $replace_pair);

?>

Es gibt einen wichtigen Unterschied zwischen den beiden Möglichkeiten der Parameterübergabe. Bei der Übergabe als String erfolgt der Austausch anhand der Positionen. Falls from und to unterschiedlich lang sind, werden die überschüssigen Zeichen ignoriert. Das hat zur Folge, dass ein oder mehrere Zeichen nicht durch ein oder mehrere Zeichen ersetzt werden können. Beispielsweise kann man A nicht durch BC ersetzen, da in dem Fall lediglich A durch B ersetzt und C ignoriert werden würde.

<?php

$str = 'A';
$from = 'A';
$to = 'BC';

// Ausgabe B
echo strtr($str, $from, $to);

?>

Das ist bei der Übergabe des Ersetzungspaars als Array anders. In dem Fall kann man vorgeben, dass ein oder mehrere Zeichen durch ein oder mehrere Zeichen ersetzt werden sollen. Beim folgenden Beispiel wird A durch BC ersetzt.

<?php

$str = 'A';
$replace_pair = array('A' => 'BC');

// Ausgabe BC
echo strtr($str, $replace_pair);

?>

Daher sollte man bei der Verwendung von Umlauten oder anderen Multibyte-Zeichen in der Zeichenkodierung UTF-8 die Variante mit dem Array wählen. Beim folgenden Beispiel wird ä durch ae, ö durch oe und ü durch ue ersetzt.

<?php

$str = 'äöü';
$replace_pair = array('ä' => 'ae', 'ö' => 'oe', 'ü' => 'ue', );

// Ausgabe aeoeue
echo strtr($str, $replace_pair);

?>

Die Funktion strtr() ist case-sensitive, sodass zwischen Groß- und Kleinschreibung unterschieden wird. Beim folgenden Beispiel wird A nicht durch BC ersetzt, da vorgegeben wurde, dass der Kleinbuchstabe a ersetzt werden soll.

<?php

$str = 'A';
$replace_pair = array('a' => 'BC');

// Ausgabe A
echo strtr($str, $replace_pair);

?>

Der Unterschied zu str_replace() oder str_ireplace() ist, dass nachdem die Zeichen ausgetauscht wurden, eine nochmalige Ersetzung nicht durchgeführt wird. Bei str_replace() und str_ireplace() kann es ähnlich wie bei einer Schleife zu einer Folge von Ersetzungen kommen, bei der das Zeichen, mit dem ersetzt wurde, ebenfalls ersetzt werden kann. Mit dem folgenden Beispielcode wird der Unterschied ersichtlich.

<?php

// Beispiel str_replace()
$str = 'A B C';
$suchen = array('A', 'B', 'C');
$ersetzen = array('B', 'C', 'D');

// Ausgabe D D D
echo str_replace($suchen, $ersetzen, $str);

// Beispiel strtr()
$str = 'A B C';
$suchen = 'ABC';
$ersetzen = 'BCD';

// Ausgabe B C D
echo strtr($str, $suchen, $ersetzen);

?>

Die Ausgabe bei str_replace() ist in diesem Beispiel D D D, da A durch B ersetzt wird, B selbst durch C und C wiederum durch D. Bei strtr() wird dagegen A durch B ersetzt und das B bleibt danach bestehen.