stripos()
Die Funktion stripos() in PHP sucht die Position des ersten Vorkommens eines Teilstrings in einem String ohne Berücksichtigung der Groß-/Kleinschreibung.
Einführung
stripos() sucht die Position des ersten Vorkommens eines Teilstrings in einem String, ohne die Groß- und Kleinschreibung zu berücksichtigen. Die Funktion gibt den nullbasierten Index zurück, an dem die Übereinstimmung beginnt, oder false, wenn der Teilstring nicht gefunden wird.
Das i im Namen steht für case-insensitive: "PHP", "php" und "Php" werden alle gleich behandelt. Falls eine Suche mit Berücksichtigung der Groß-/Kleinschreibung benötigt wird, verwende strpos(). Diese Seite behandelt die Syntax, den kritischen !== false-Fallstrick, den optionalen $offset-Parameter und die Beziehung von stripos() zu anderen Positionsfunktionen.
Syntax
stripos(string $haystack, string $needle, int $offset = 0): int|false| Parameter | Beschreibung |
|---|---|
$haystack | Der String, in dem gesucht wird. |
$needle | Der Teilstring, nach dem gesucht wird. |
$offset | Optional. Der Index in $haystack, ab dem die Suche beginnt. Standardmäßig 0 (der Anfang). Ein negativer Offset zählt vom Ende des Strings. |
Rückgabewert: die nullbasierte Position der ersten Übereinstimmung (ein int) oder false, wenn $needle nicht gefunden wird.
Ein einfaches Beispiel
Der Suchstring "fox" ist kleingeschrieben, aber der Ausgangsstring enthält "FOX". Da stripos() die Groß-/Kleinschreibung ignoriert, wird trotzdem eine Übereinstimmung gefunden und folgendes ausgegeben:
Found 'fox' at position 16Wird hier stattdessen strpos() verwendet, wäre das Ergebnis false, da die Schreibweise abweicht.
Der !== false-Fallstrick
Dies ist der häufigste Fehler bei stripos() (und allen *pos()-Funktionen). Wenn eine Übereinstimmung ganz am Anfang des Strings gefunden wird, ist der Rückgabewert 0 – und 0 ist in PHP falsy. Eine lockere Prüfung wie if (stripos(...)) würde eine tatsächliche Übereinstimmung als „nicht gefunden" behandeln:
<?php
$pos = stripos("Hello world", "hello");
// Wrong: 0 is falsy, so this branch runs even though there IS a match
if ($pos) {
echo "loose check: found\n";
} else {
echo "loose check: NOT found (wrong!)\n";
}
// Correct: compare against false with the strict !== operator
if ($pos !== false) {
echo "strict check: found at position $pos\n";
} else {
echo "strict check: not found\n";
}Ausgabe:
loose check: NOT found (wrong!)
strict check: found at position 0Vergleiche das Ergebnis immer mit !== false, wenn du nur wissen möchtest, ob der Teilstring vorhanden ist.
Den Parameter $offset verwenden
Das dritte Argument ermöglicht es, die Suche mitten im String zu beginnen – praktisch, um das zweite (oder spätere) Vorkommen zu finden:
<?php
$text = "PHP is great. PHP is everywhere.";
$first = stripos($text, "php"); // start at 0
$second = stripos($text, "php", $first + 1); // skip past the first match
echo "First occurrence: $first\n";
echo "Second occurrence: $second\n";Ausgabe:
First occurrence: 0
Second occurrence: 14Ein praktisches Beispiel: Schlüsselwortfilter ohne Groß-/Kleinschreibung
Da stripos() die Schreibweise ignoriert, eignet es sich gut für „Enthält dieser Text X?"-Prüfungen, etwa um Nachrichten zu markieren, die ein verbotenes Wort enthalten – unabhängig davon, wie es geschrieben wurde:
<?php
$message = "Get this AMAZING deal now!";
$banned = ["amazing", "free", "winner"];
foreach ($banned as $word) {
if (stripos($message, $word) !== false) {
echo "Blocked: contains '$word'\n";
break;
}
}Ausgabe:
Blocked: contains 'amazing'Verwandte Funktionen
| Funktion | Groß-/Kleinschreibung | Sucht von |
|---|---|---|
stripos() | Ignoriert | Anfang → erstes Vorkommen |
strpos() | Berücksichtigt | Anfang → erstes Vorkommen |
strripos() | Ignoriert | Ende → letztes Vorkommen |
stristr() | Ignoriert | Gibt den übereinstimmenden Teilstring zurück, nicht seine Position |
Siehe auch substr() zum Extrahieren von Text, wenn du eine Position hast, und str_replace() für Ersetzungen mit Berücksichtigung der Groß-/Kleinschreibung.
Fazit
stripos() gibt die nullbasierte Position des ersten Vorkommens eines Teilstrings zurück, ohne Berücksichtigung der Groß-/Kleinschreibung, oder false, wenn keins gefunden wird. Denke daran, das Ergebnis mit !== false zu prüfen, damit eine Übereinstimmung an Position 0 nicht als „nicht gefunden" gewertet wird. Verwende $offset, um spätere Vorkommen zu finden, und greife auf strpos() zurück, wenn die Schreibweise relevant ist.