Die Funktion strstr() hilft dir, gezielt Teile von Zeichenketten (Strings) zu finden und auszulesen. Gerade beim Umgang mit Daten wie E-Mails, Protokollen oder strukturierten Texten begegnet dir diese Funktion in der Praxis immer wieder.

1. Einleitung: Was ist PHP strstr()?
Mit strstr() kannst du nach einem bestimmten Teilstring in einer Zeichenkette suchen. Wird der Suchbegriff gefunden, erhältst du den Rest der Zeichenkette ab dem Suchbegriff – oder auf Wunsch sogar den Teil davor.
Warum ist das praktisch? Viele Aufgaben in PHP verlangen, dass du z.B. Benutzernamen aus E-Mail-Adressen extrahierst oder Inhalte nach bestimmten Trennzeichen aufteilst. Mit strstr() gelingt das elegant und ohne komplizierte Schleifen.
2. Grundlagen von strstr()
Um die Function strstr() korrekt einzusetzen, solltest du die Parameter und das Verhalten der Funktion genau kennen.
Die Syntax von strstr() sieht wie folgt aus:
string|false strstr(string $sHeuhaufen, string $sNadel, bool $bVorNadel = false)
- $sHeuhaufen: Die zu durchsuchende Zeichenkette (dein gesamter Text).
- $sNadel: Der zu suchende Teilstring.
- $bVorNadel (optional): Wenn true, gibt strstr() alles vor dem ersten Vorkommen von $sNadel zurück. Standard ist false.
Der Rückgabewert ist entweder ein String (bei Erfolg) oder false (wenn der Suchbegriff nicht gefunden wird).
Beachte, dass strstr() zwischen Groß- und Kleinschreibung unterscheidet. Außerdem arbeitet die Funktion binärsicher, was bedeutet, dass sie beliebige Daten (auch Binärdaten) korrekt verarbeiten kann.
3. strstr() in der Praxis: Ausführliche Beispiele
Am besten verstehst du den Nutzen von strstr(), wenn du dir typische Anwendungsfälle ansiehst.
Beispiel 1: Den Rest der Zeichenkette ab einem Substring finden
Du willst alles ab dem @-Zeichen aus einer E-Mail-Adresse herauslösen:
$sEmail = "user@example.com";
$sRest = strstr($sEmail, "@");
/** $sRest enthält jetzt: "@example.com" */
Beispiel 2: Den Teil vor dem Suchbegriff auslesen
Wenn du nur den Namen vor dem @ brauchst, kannst du den dritten Parameter nutzen:
$sEmail = "user@example.com";
$sName = strstr($sEmail, "@", true);
/** $sName enthält jetzt: "user" */
Beispiel 3: Trennen an beliebigen Zeichen
Du hast eine Liste mit Daten und willst den Teil vor einem Doppelpunkt:
$sDaten = "status:ok";
$sStatus = strstr($sDaten, ":", true);
/** $sStatus enthält jetzt: "status" */
Beispiel 4: Suche mit ASCII-Werten
Manchmal willst du nach bestimmten Sonderzeichen suchen – z.B. nach einem Komma:
$sText = "Wert1,Wert2";
$sErsterTeil = strstr($sText, ",", true);
/** $sErsterTeil enthält: "Wert1" */
Du kannst sogar nach einem Zeichen mit seinem ASCII-Code suchen (in alten PHP-Versionen). Ab PHP 8.0 ist das aber veraltet:
// Nicht mehr empfohlen, aber so ging es früher:
// $sErsterTeil = strstr($sText, 44, true);
// 44 ist ASCII für ","
Was passiert, wenn der Suchbegriff nicht gefunden wird?
Wenn strstr() den Teilstring nicht findet, gibt sie false zurück. Dies solltest du immer sorgfältig abprüfen:
$sText = "Apfel";
$sErgebnis = strstr($sText, "@");
if ($sErgebnis === false) {
/** Teilstring nicht gefunden – die Funktion gibt false zurück, wenn die needle nicht im haystack gefunden wird. */
}
Das strikte === ist wichtig, weil auch leere Strings (z.B. wenn vor dem Suchbegriff nichts steht) ansonsten als false gewertet werden können.
4. strstr() vs. Ähnliche Funktionen: Wann welche verwenden?
PHP bietet verschiedene Funktionen, um mit Teilstrings zu arbeiten. Je nach Situation gibt es Alternativen, die besser oder schneller sind.
strstr() vs. stristr()
Der Unterschied liegt in der Groß-/Kleinschreibung. stristr() ignoriert Groß-/Kleinschreibung, strstr() dagegen nicht:
$sText = "Hallo Welt";
$sTeil = strstr($sText, "welt");
// gibt false zurück
$sTeilCI = stristr($sText, "welt");
// gibt "Welt" zurück
strstr() vs. strpos() / str_contains() (ab PHP 8.0)
- strpos() gibt dir die Position des Substrings zurück, nicht den Text selbst.
- str_contains() gibt einen booleschen Wert zurück, ob der Substring existiert.
Wenn du nur prüfen willst, ob ein Teilstring vorkommt, ist strpos() (bzw. ab PHP 8.0 besser: str_contains()) schneller:
$sText = "Beispieltext";
$bVorhanden = strpos($sText, "Beispiel") !== false;
$bVorhandenNeu = str_contains($sText, "Beispiel");
// ab PHP 8.0
strstr() vs. substr()
Wenn du genau weißt, wo dein Teilstring anfängt, kannst du mit substr() gezielt Teile herausschneiden. strstr() ist bequemer, wenn du nicht vorher die Position bestimmen willst.
strstr() vs. strrchr()
Mit strrchr() findest du das letzte Vorkommen eines Teilstrings und alles danach:
$sText = "user@mail@domain.com";
$sLetzterRest = strrchr($sText, "@");
/** $sLetzterRest enthält: "@domain.com" */
Vergleichstabelle: Wann welche Funktion?
Funktion | Groß-/Kleinschreibung | Rückgabe | Wann einsetzen? |
strstr() | Ja | Teilstring ab Fund | Rest ab erstem Vorkommen extrahieren |
stristr() | Nein | Teilstring ab Fund | Wie strstr(), aber ohne Case-Sensitiv. |
strpos() | Ja | Integer (Position) | Nur prüfen oder gezielt zuschneiden |
str_contains() | Ja | Boolean | Ab PHP 8.0, reine Existenzprüfung |
strrchr() | Ja | Ab letztem Fund | Nach letztem Vorkommen aufteilen |
substr() | n/a | Beliebig | Feste Positionen ausschneiden |
5. Häufige Fehler und Best Practices
Bestimmte Fehler tauchen bei strstr() immer wieder auf. Wer sie kennt, spart sich Debugging-Zeit.
Fehler 1: Unsichere if-Abfragen
Viele schreiben:
if (strstr($sText, "@")) { ... }
Das kann schiefgehen, wenn der Rückgabewert z.B. “0” oder ein leerer String ist. Besser:
$sErgebnis = strstr($sText, "@");
if ($sErgebnis !== false) {
/** Substring wurde gefunden */
}
Fehler 2: Leerer Suchbegriff
Seit PHP 8.0 gibt ein leerer $sNadel-Parameter immer den vollen String zurück. Vorher war das Verhalten unterschiedlich – deshalb solltest du das vermeiden.
Performance:
strstr() durchsucht immer die gesamte Zeichenkette bis zum Fund. Wenn du nur wissen willst, ob etwas vorkommt, nimm strpos() oder ab PHP 8.0 str_contains(), um das erste Vorkommen der needle zu finden. Das geht schneller und braucht weniger Speicher.
Typische Anwendungsfälle:
-
Domain aus E-Mail extrahieren:
$sEmail = "name@domain.de";
$sDomain = strstr($sEmail, "@");
/** $sDomain: "@domain.de" */
-
Protokolldateien parsen:
Trenne alles ab einem Doppelpunkt, Semikolon oder Komma, um z.B. Felder zu isolieren.
-
Keywords prüfen:
Prüfe, ob ein Log-String einen Fehlercode enthält, bevor du weitere Aktionen startest.
6. Versionshinweise und Deprecation
Achte immer auf die PHP-Version, wenn du strstr() verwendest. Manche Features stehen nicht überall zur Verfügung.
- Seit PHP 5.3 gibt es den Parameter $bVorNadel.
- Ab PHP 7.3.0 ist die Übergabe von Integer-Werten als $sNadel veraltet und ab PHP 8.0 entfernt. Verwende immer einen String als Suchbegriff!
- Seit PHP 8.0 solltest du für reine Existenzprüfungen besser str_contains() verwenden.
7. Fazit
strstr() bleibt eine vielseitige, einfach zu verwendende Funktion für das Arbeiten mit Zeichenketten. Setze sie gezielt ein, wenn du ab einem bestimmten Zeichen alles brauchst – oder mit dem dritten Parameter auch davor, um eine Funktion zu nutzen, die unabhängig von Groß- und Kleinschreibung ist.
Für einfache Prüfungen auf Vorhandensein eines Substrings solltest du ab PHP 8.0 lieber str_contains() verwenden. Bei größeren Projekten lohnt sich ein prüfender Blick auf Performance und Klarheit, bevor du dich für strstr() entscheidest.