Start · Sprachen · PHP · Referenz · mb_strstr

mb_strstr

Funktion

Findet das erste Vorkommen von <code>needle</code> in <code>haystack</code> und gibt den entsprechenden Teilstring zurück – multibyte-sicher.

seit PHP 5.2.0 Kategorie: string

Signatur

mb_strstr(string $haystack, string $needle, bool $before_needle = false, ?string $encoding = null): string|false

Beschreibung

mb_strstr() ist die multibyte-sichere Entsprechung von strstr(). Sie sucht das erste Vorkommen des Strings needle im String haystack und gibt entweder den Teil ab dem Treffer (inklusive needle) oder den Teil davor zurück – je nach Wert des Parameters before_needle.

Die Funktion ist besonders wichtig bei Texten in Mehrbytezeichensätzen wie UTF-8, Shift-JIS oder EUC-JP, da strstr() in solchen Fällen fehlerhafte Ergebnisse liefern kann, indem es Byte-Grenzen ignoriert und Zeichen zerschneidet.

Wenn before_needle auf true gesetzt wird, gibt die Funktion den Teil des Strings vor dem ersten Vorkommen von needle zurück (ohne needle selbst). Das ist praktisch, um etwa Präfixe, Benutzernamen oder Domänen aus zusammengesetzten Strings zu extrahieren.

Wird needle nicht in haystack gefunden, gibt die Funktion false zurück. Der Vergleich ist case-sensitiv; für eine Suche ohne Beachtung der Groß-/Kleinschreibung steht mb_stristr() zur Verfügung.

Parameter

Name Typ Default Beschreibung
$haystack Pflicht string Der Eingabe-String, in dem gesucht wird.
$needle Pflicht string Der gesuchte Teilstring. Anders als bei strstr() vor PHP 8.0 muss needle immer ein String sein.
$before_needle bool false Wenn true, wird der Teil des Strings vor dem ersten Vorkommen von needle zurückgegeben (ohne needle). Standardmäßig false: Es wird der Teil ab dem ersten Vorkommen (inklusive needle) zurückgegeben.
$encoding string|null null Die zu verwendende Zeichenkodierung (z. B. 'UTF-8'). Bei null wird die intern gesetzte Kodierung verwendet (mb_internal_encoding()).

Rückgabewert

Typ
string|false
Beschreibung
Gibt den gefundenen Teilstring zurück – entweder ab dem ersten Vorkommen von needle (inklusive) oder den Teil davor, abhängig von before_needle. Wird needle nicht gefunden, wird false zurückgegeben.

Beispiele

Domain aus einer E-Mail-Adresse extrahieren

<?php
$email = 'benutzer@example.com';

// Teil ab '@' (inklusive '@')
$domain_mit_at = mb_strstr($email, '@');
echo $domain_mit_at; // @example.com

// Nur die Domain (ohne '@')
$domain = ltrim(mb_strstr($email, '@'), '@');
echo $domain; // example.com

// Benutzername (Teil vor '@')
$benutzername = mb_strstr($email, '@', before_needle: true);
echo $benutzername; // benutzer
@example.com example.com benutzer

Suche in einem UTF-8-String mit Sonderzeichen

<?php
$text = 'Füße sind größer als Hände';

// Suche nach 'größer'
$result = mb_strstr($text, 'größer', encoding: 'UTF-8');
var_dump($result);

// Suche nach einem nicht vorhandenen Teilstring
$result_fehlt = mb_strstr($text, 'kleiner', encoding: 'UTF-8');
var_dump($result_fehlt);

// Teil vor dem Treffer
$vor_treffer = mb_strstr($text, 'größer', before_needle: true, encoding: 'UTF-8');
var_dump($vor_treffer);
string(14) "größer als Hände" bool(false) string(16) "Füße sind "

Dateiendung aus einem Dateinamen extrahieren

<?php
$dateiname = 'dokument.bericht.pdf';

// Letzten Punkt und alles dahinter finden
// mb_strrchr wäre ideal, hier Demo mit mb_strstr für erstes Vorkommen
$erweiterung_ab_erstem_punkt = mb_strstr($dateiname, '.');
echo $erweiterung_ab_erstem_punkt . PHP_EOL; // .bericht.pdf

$name_vor_erstem_punkt = mb_strstr($dateiname, '.', before_needle: true);
echo $name_vor_erstem_punkt . PHP_EOL; // dokument
.bericht.pdf dokument

// Wichtig · Fallstricke

Rückgabewert prüfen: Da mb_strstr() bei einem nicht gefundenen needle false zurückgibt, sollte der Rückgabewert immer mit === false geprüft werden, um Verwechslungen mit einem leeren String zu vermeiden.

Kodierung: Wird kein encoding angegeben, gilt die mit mb_internal_encoding() gesetzte Kodierung. Für konsistentes Verhalten empfiehlt es sich, die Kodierung explizit anzugeben.

Für das letzte Vorkommen: Um das letzte Vorkommen eines Teilstrings zu finden, steht mb_strrchr() zur Verfügung. Für eine Suche ohne Beachtung der Groß-/Kleinschreibung bietet sich mb_stristr() an.