Funktion mb_strrchr() - Das letzte Vorkommen eines Zeichens in UTF-8 suchen

Bei der Verarbeitung von Zeichenketten kann man vor der Aufgabe stehen, das letzte Vorkommen eines Zeichens suchen zu müssen, um den gesuchten Teil-String sowie den Rest zurückzugeben und weiter zu verarbeiten. Hierfür gibt es die Funktion strrchr(). Bei der Verwendung der Zeichenkodierung UTF-8 erhält man jedoch nicht das gewünschte Ergebnis, wenn man z.B. nach Umlauten suchen lässt. Beim folgenden Beispiel ist der Rückgabewert ß, obwohl nach dem Zeichen ä gesucht wird.

<?php

$str = 'äöüÄÖÜß';
$needle = 'ä';

// Ausgabe ß
echo strrchr($str, $needle);

?>

In solchen Fällen kann man die Multibyte-Funktion mb_strrchr() verwenden. Sie funktioniert im Grunde wie strrchr(), hat jedoch den Vorteil, dass man die Zeichenkodierung mit angeben kann. Die Parameter werden hierbei wie folgt angegeben.

  1. Die Zeichenkette, in der nach dem Teil-String gesucht werden soll (haystack).
  2. Der Teil-String, nach dem in der Zeichenkette gesucht werden soll (needle).
  3. Ein boolescher Wert, mit dem der Rückgabewert beeinflusst wird (part, optional).
  4. Die Zeichenkodierung (encoding, optional).

Beim folgenden Beispiel ist die Ausgabe äöüÄÖÜß, da die Funktion case-sensitive ist und das Zeichen ä somit das letztes Vorkommen in der Zeichenkette ist. Zusammen mit dem gesuchten Zeichen ä werden die restlichen Zeichen ausgegeben.

<?php

$str = 'äöüÄÖÜß';
$needle = 'ä';

// Ausgabe äöüÄÖÜß
echo mb_strrchr($str, $needle, FALSE, 'UTF-8');

?>

Mit dem dritten Parameter wird angegeben, was zurückgegeben werden soll. In der Standardeinstellung gilt hierfür der Wert FALSE. Das sorgt dafür, dass das gesuchte Zeichen sowie der Rest der Zeichenkette zurückgegeben wird. Es ist auch möglich, die Zeichen davor zurückgeben zu lassen. Hierfür setzt man den Parameter auf TRUE.

<?php

$str = 'äöüÄÖÜß';
$needle = 'Ä';

// Ausgabe äöü
echo mb_strrchr($str, $needle, TRUE, 'UTF-8');

?>

Wenn die Zeichenkodierung über den vierten Parameter nicht angegeben wird, gilt die interne Zeichenkodierung. Um diese zu ermitteln, kann man die Funktion mb_internal_encoding() verwenden und ausgeben lassen.

<?php

echo mb_internal_encoding();

?>

Falls man die interne Zeichenkodierung verändern möchte, kann man in der Konfigurationsdatei php.ini den entsprechenden Eintrag z.B. mit mbstring.internal_encoding = UTF-8 anpassen. Ab der PHP-Version 5.6 gelten die beiden Funktionen mbstring.internal_encoding() und mb_internal_encoding() als deprecated und sollen zum Setzen der internen Zeichenkodierung nicht verwendet werden. Stattdessen ist es vorgesehen, in der php.ini den Eintrag default_charset anzupassen.

Wie bei den anderen Multibyte-Funktionen kann mb_strrchr() nur verwendet werden, wenn auf dem Server die PHP-Erweiterung mbstring zur Verfügung steht. Das kann über die Funktion phpinfo() überprüft werden. Welche Zeichenkodierungen dabei unterstützt werden, kann man über mb_list_encodings() ermitteln. Hierbei erhält man als Rückgabewert ein Array, den man auslesen kann, z.B. mit der foreach-Schleife.