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| Parameter | Beschreibung |
|---|---|
$haystack | Der zu durchsuchende String. |
$needle | Der zu suchende Teilstring. Der Abgleich erfolgt ohne Groß-/Kleinschreibungsbeachtung. |
$before_needle | Optional. 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
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"; // UserPrü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
| Funktion | Groß-/Kleinschreibung? | Gibt zurück |
|---|---|---|
stristr() | Nein | Übereinstimmender Teilstring (oder false) |
strstr() | Ja | Übereinstimmender Teilstring (oder false) |
stripos() | Nein | Positionsindex (oder false) |
strpos() | Ja | Positionsindex (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
falsevs. leerer String. Ein erfolgreicher Treffer gibt nie einen leeren String am Anfang zurück, aber ein Treffer ganz am Ende von$haystackgibt 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 stattdessenmb_stristr()aus dermbstring-Erweiterung. - Kein-String-
$needle. Ab PHP 8.0 wird$needleimmer 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.