W3docs

strpos()

Die PHP-Funktion strpos() findet die Position des ersten Vorkommens eines Teilstrings in einem String und gibt die numerische Position zurück.

Einführung

Die Funktion strpos() in PHP sucht die Position des ersten Vorkommens eines Teilstrings innerhalb eines anderen Strings. Sie gibt den nullbasierten Index dieses Vorkommens zurück oder den boolean-Wert false, wenn der Teilstring nicht gefunden wird. Sie gehört zu den am häufigsten verwendeten String-Funktionen in PHP – man greift auf sie zurück, wenn man wissen möchte: „Enthält dieser String jenen Text, und wo?"

Dieses Kapitel behandelt die Syntax, die besonders wichtige === false-Prüfung, den $offset-Parameter, die Groß-/Kleinschreibungsempfindlichkeit und die verwandten Funktionen, die man kennen sollte.

Syntax

strpos(string $haystack, string $needle, int $offset = 0): int|false
ParameterBeschreibung
$haystackDer String, in dem gesucht wird.
$needleDer Teilstring, nach dem gesucht wird.
$offsetOptional. Der Zeichenindex, ab dem die Suche beginnt. Standardwert ist 0 (Anfang). Ein negativer Offset zählt vom Ende des Strings.

Rückgabewert: die ganzzahlige Position des ersten Treffers (gezählt ab 0) oder false, wenn $needle nicht gefunden wurde.

Einfaches Beispiel

php— editable, runs on the server

"World" beginnt an Index 6 in "Hello World" (das H steht an Index 0), daher lautet die Ausgabe:

Found 'World' in 'Hello World' at position 6

Die === false-Falle (unbedingt lesen)

Dies ist der häufigste Fehler bei strpos(). Wenn der Treffer am Anfang des Strings liegt, gibt strpos() den Wert 0 zurück – und 0 ist in PHP falsy. Testet man das Ergebnis mit einer lockeren Prüfung wie if (!strpos(...)) oder if (strpos(...) == false), wird ein gültiger Treffer an Position 0 fälschlicherweise als „nicht gefunden" interpretiert.

<?php

$haystack = "php is great";

// WRONG: 0 is treated as "not found"
if (strpos($haystack, "php")) {
  echo "loose: found\n";
} else {
  echo "loose: not found (WRONG!)\n";
}

// RIGHT: use the strict !== operator
if (strpos($haystack, "php") !== false) {
  echo "strict: found\n";
} else {
  echo "strict: not found\n";
}

Ausgabe:

loose: not found (WRONG!)
strict: found

Vergleiche das Ergebnis immer mit dem strikten !==- (oder ===-)Operator. Das ist die goldene Regel von strpos().

Suche ab einem Offset

Das dritte Argument gibt an, wo strpos() mit der Suche beginnt. So lassen sich das zweite (und weitere) Vorkommen eines Teilstrings finden – man sucht das erste und startet dann direkt dahinter erneut.

<?php

$text = "cat, dog, cat, bird";

$first  = strpos($text, "cat");        // 0
$second = strpos($text, "cat", $first + 1); // 10

echo "first: $first\n";
echo "second: $second\n";

Ausgabe:

first: 0
second: 10

Ein negativer Offset beginnt die Suche entsprechend viele Zeichen vom Ende des Strings.

Groß-/Kleinschreibung

strpos() unterscheidet Groß- und Kleinschreibung: "World" und "world" sind verschiedene Suchbegriffe.

<?php

var_dump(strpos("Hello World", "world")); // bool(false)
var_dump(strpos("Hello World", "World")); // int(6)

Für eine Suche ohne Berücksichtigung der Groß-/Kleinschreibung verwendet man stripos() – diese Funktion hat dieselbe Signatur, ignoriert aber die Schreibweise.

Nur prüfen „Enthält es X?"

Wenn man lediglich wissen möchte, ob ein Teilstring vorhanden ist (nicht wo), bietet PHP 8.0+ die wesentlich klarere Funktion str_contains(), die einen einfachen boolean-Wert zurückgibt und die === false-Falle völlig umgeht:

<?php

// PHP 8.0+
var_dump(str_contains("Hello World", "World")); // bool(true)
var_dump(str_contains("Hello World", "world")); // bool(false)

Verwende strpos(), wenn du die Position benötigst, und str_contains(), wenn du nur eine Ja/Nein-Antwort brauchst.

Verwandte Funktionen

  • stripos() — Groß-/Kleinschreibungsunempfindliche Version von strpos().
  • strrpos() — findet das letzte statt das erste Vorkommen.
  • strstr() — gibt den Teil des Strings ab dem ersten Treffer zurück.
  • substr() — extrahiert einen Teilstring, sobald die Position bekannt ist.
  • str_replace() — ersetzt alle Vorkommen eines Teilstrings.
  • preg_match() — musterbasierte Suche, wenn reguläre Ausdrücke benötigt werden.

Fazit

strpos() gibt die nullbasierte Position des ersten Vorkommens eines Teilstrings zurück oder false, wenn er nicht vorhanden ist. Die zwei häufigsten Fallstricke sind: das Ergebnis immer mit dem strikten !== false vergleichen und stripos() bzw. str_contains() verwenden, wenn eine Groß-/Kleinschreibungsunempfindliche Suche oder eine einfache boolean-Prüfung benötigt wird.

Übungen

Übung
Was macht die Funktion strpos() in PHP?
Was macht die Funktion strpos() in PHP?
Was this page helpful?