W3docs

stristr()

Die PHP-Funktion stristr() findet das erste Vorkommen eines Teilstrings ohne Berücksichtigung der Groß-/Kleinschreibung und gibt den Rest zurück.

Einführung

stristr() ist eine PHP-String-Funktion, die das erste Vorkommen eines Teilstrings innerhalb eines Strings ohne Berücksichtigung der Groß-/Kleinschreibung findet und alles ab dieser Stelle bis zum Ende des Strings zurückgibt. Wird der Teilstring nicht gefunden, gibt sie false zurück.

Sie ist das Pendant ohne Groß-/Kleinschreibungsbeachtung zu strstr(). Verwende stristr(), wenn beim Abgleich Hello, HELLO und hello als identisch behandelt werden sollen — zum Beispiel beim Durchsuchen von benutzereingegebenen Schlüsselwörtern, beim Parsen einer E-Mail-Adresse oder beim Aufteilen eines Strings an einem Trennzeichen unabhängig von der Groß-/Kleinschreibung.

Diese Seite behandelt die Syntax, den Rückgabewert, den optionalen Parameter $before_needle, häufige Fallstricke und den Unterschied zwischen stristr() und verwandten Funktionen.

Syntax

stristr(string $haystack, string $needle, bool $before_needle = false): string|false
ParameterBeschreibung
$haystackDer zu durchsuchende String.
$needleDer zu suchende Teilstring. Der Abgleich erfolgt ohne Groß-/Kleinschreibungsbeachtung.
$before_needleOptional. Bei true wird der Teil von $haystack vor dem ersten Treffer zurückgegeben statt danach.

Rückgabewert: der übereinstimmende Teil von $haystack (die ursprüngliche Groß-/Kleinschreibung bleibt erhalten, wird nicht in Kleinbuchstaben umgewandelt) oder false, wenn $needle nicht vorkommt.

Grundlegendes Beispiel

php— editable, runs on the server

Obwohl nach "BROWN" in Großbuchstaben gesucht wurde, hat stristr() das kleingeschriebene brown im String gefunden und den Rest des Satzes ab diesem Wort zurückgegeben — mit der ursprünglichen Groß-/Kleinschreibung.

Den Teil vor dem Treffer ermitteln

Übergib true als drittes Argument, um alles vor dem ersten Treffer zurückzugeben. Das ist nützlich, um einen String an einem Trennzeichen aufzuteilen, beispielsweise um den Benutzeranteil einer E-Mail-Adresse zu extrahieren:

<?php

$email = "[email protected]";

$after  = stristr($email, "@");        // from "@" onward
$before = stristr($email, "@", true);  // up to (not including) "@"

echo $after . "\n";   // @Example.com
echo $before . "\n";  // User

Prüfen, ob ein Teilstring vorhanden ist

Ein häufiger Fehler ist die Verwendung von stristr() als booleschen Test. Das funktioniert, aber du musst mit dem strikten Operator !== gegen false vergleichen, da der zurückgegebene String selbst falsy sein kann (zum Beispiel "0"):

<?php

$text = "Contact us at [email protected]";

if (stristr($text, "support") !== false) {
  echo "Contains 'support' (any case)";
} else {
  echo "Not found";
}
// Output: Contains 'support' (any case)

Wenn du nur wissen möchtest, ob ein Teilstring vorhanden ist — und den übereinstimmenden Teil nicht benötigst — bevorzuge stripos() (Position ohne Groß-/Kleinschreibungsbeachtung) oder strpos() (mit Groß-/Kleinschreibungsbeachtung). Diese geben den Index des Treffers zurück und sind etwas schneller, da sie nicht den Rest des Strings kopieren.

stristr() im Vergleich zu verwandten Funktionen

FunktionGroß-/Kleinschreibung?Gibt zurück
stristr()NeinÜbereinstimmender Teilstring (oder false)
strstr()JaÜbereinstimmender Teilstring (oder false)
stripos()NeinPositionsindex (oder false)
strpos()JaPositionsindex (oder false)

Verwende stristr(), wenn du den Text ab dem Treffer benötigst und die Groß-/Kleinschreibung ignoriert werden soll. Verwende stripos()/strpos(), wenn du nur die Position oder eine Ja/Nein-Antwort benötigst.

Hinweise und Fallstricke

  • false vs. leerer String. Ein erfolgreicher Treffer gibt nie einen leeren String am Anfang zurück, aber ein Treffer ganz am Ende von $haystack gibt nur die Nadel zurück. Teste immer mit !== false.
  • Groß-/Kleinschreibung wird nur beim Abgleich ignoriert. Der zurückgegebene Teilstring behält die Schreibweise des ursprünglichen $haystack.
  • Mehrbyte-/UTF-8-Text. stristr() arbeitet auf Byte-Ebene. Für zuverlässigen Abgleich ohne Groß-/Kleinschreibungsbeachtung bei Zeichen mit Akzenten oder nicht-lateinischen Zeichen verwende stattdessen mb_stristr() aus der mbstring-Erweiterung.
  • Kein-String-$needle. Ab PHP 8.0 wird $needle immer als String behandelt. In älteren Versionen wurde ein Nicht-String-Parameter als ASCII-Zeichencode interpretiert.

Fazit

stristr() gibt den Teil eines Strings ab dem ersten groß-/kleinschreibungsunabhängigen Treffer eines Teilstrings zurück, oder false wenn kein Treffer gefunden wird — und mit $before_needle auf true gesetzt den Teil vor dem Treffer. Wähle diese Funktion, wenn du den übereinstimmenden Text unabhängig von der Groß-/Kleinschreibung benötigst; wähle stripos() oder strpos(), wenn du nur eine Position oder eine Vorhandenseinsprüfung benötigst.

Übungen

Übung
Was macht die Funktion 'stristr' in PHP?
Was macht die Funktion 'stristr' in PHP?
Was this page helpful?