Funktion mb_stristr() - String in der Zeichenkodierung UTF-8 suchen

Wenn Zeichenketten nach bestimmten Vorkommen von Teil-Strings durchsucht werden, kann man hierfür die beiden Funktionen strstr() und stristr() verwenden. Die unterscheiden sich darin, dass stristr() nicht case-sensitive ist. Allerdings kann es bei stristr() passieren, dass bei der Verwendung der Zeichenkodierung UTF-8 die Groß- und Kleinbuchstaben nicht zueinander zugeordnet werden. Wenn man z.B. nach dem Kleinbuchstaben ä sucht, findet die Funktion den Großbuchstaben Ä nicht bzw. hält das Zeichen nicht zu ä zugehörig. Beim folgenden Beispiel ist der Rückgabewert äöü, obwohl es ÄÖÜßäöü sein sollte.

<?php

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

// Ausgabe äöü
echo stristr($str, $needle);

?>

In solchen Fällen kann man die Multibyte-Funktion mb_stristr() verwenden. Sie funktioniert genauso wie stristr(), nur mit dem Unterschied, dass man auch die Zeichenkodierung angeben kann. So wird z.B. das Zeichen ä als Kleinbuchstabe von Ä erkannt. Innerhalb der runden Klammern werden die Parameter 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 man den Rückgabewert beeinflusst (before_needle, optional).
  4. Die Zeichenkodierung (encoding, optional).

Der Unterschied zu stristr() ist beim folgenden Beispiel ersichtlich. Der Rückgabewert ist ÄÖÜßäöü.

<?php

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

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

?>

Mit dem dritten Parameter wird angegeben, was zurückgegeben werden soll. In der Standardeinstellung gilt hierfür der Wert FALSE. Dadurch wird der gesuchte Teil-String sowie der folgende Rest der Zeichenkette zurückgegeben. Es ist auch möglich, die Zeichen vor dem gesuchten Teil-String zurückgeben zu lassen. Hierfür setzt man den dritten Parameter auf TRUE.

<?php

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

// Ausgabe ÄÖÜ
echo mb_stristr($str, $needle, TRUE, 'UTF-8');

?>

Falls der gesuchte Teil-String nicht gefunden wird, ist der Rückgabewert FALSE (Typ bool). Falls die Zeichenkodierung über den vierten Parameter nicht angegeben wird, wird die interne Zeichenkodierung verwendet. Welche das ist, kann man mit der Funktion mb_internal_encoding() herausfinden.

<?php

echo mb_internal_encoding();

?>

Falls die interne Zeichenkodierung verändert werden soll, kann man in der Datei php.ini den Eintrag z.B. mit mbstring.internal_encoding = UTF-8 verändern. Die beiden Funktionen mbstring.internal_encoding() und mb_internal_encoding() gelten ab PHP 5.6 als deprecated und sollen daher nicht mehr verwendet werden. Um die interne Zeichenkodierung zu verändern ist es vorgesehen, in der Datei php.ini den Eintrag default_charset anzupassen.

Die Funktion mb_stristr() kann wie bei den anderen Multibyte-Funktionen nur verwendet werden, wenn auf dem Server die PHP-Erweiterung mbstring aktiviert ist. Um zu überprüfen, ob die Erweiterung aktiviert ist, kann man die Funktion phpinfo() verwenden. Welche Zeichenkodierungen unterstützt werden, kann man mit der Funktion mb_list_encodings() ermitteln. Als Rückgabewert erhält man hierbei ein Array, den man z.B. mit der foreach-Schleife auslesen kann.