Wer mit Zeichenketten arbeitet, braucht Tools für präzise Suchen – und manchmal reicht es eben nicht, einfach das erste Vorkommen zu finden. PHPs strrpos() löst ein typisches Problem aus der Praxis: Wie finde ich zuverlässig die letzte Position eines bestimmten Zeichens oder Teilstrings? Genau das, und alles, was damit zusammenhängt, lernst du in diesem Guide.

I. Einleitung: Was genau ist PHP strrpos() und wann braucht man es?
Die Funktion strrpos() sucht in einer Zeichenkette (sHeuhaufen) nach dem letzten Vorkommen eines Zeichens oder Teilstrings (sNadel) und liefert dessen Position als Integer zurück. Findet die Funktion nichts, gibt sie false zurück.
Warum „letztes Vorkommen“? In vielen Situationen ist es entscheidend, nicht das erste, sondern das letzte Auftreten zu kennen. Das klassische Beispiel ist das Parsen von Dateipfaden: Willst du aus mein_wichtiges_dokument.pdf nur die Endung .pdf extrahieren, musst du das letzte Punkt-Zeichen finden. Gleiches gilt für URL-Segmente, strukturierte Daten oder bei Suffix-Prüfungen.
Praxisbeispiel zum Einstieg:
/** Datei-Endung extrahieren **/
$sDateiname = "mein_wichtiges_dokument.pdf";
$iLetzterPunkt = strrpos($sDateiname, ".");
if ($iLetzterPunkt !== false) {
$sEndung = substr($sDateiname, $iLetzterPunkt + 1);
/** $sEndung ist "pdf" **/
}
Hinweis zur Groß-/Kleinschreibung:
strrpos() ist case-sensitive! Willst du unabhängig von Groß- und Kleinschreibung suchen, nutze strripos().
II. Die Syntax von strrpos() im Detail
Offizielle Syntax:
strrpos(string $sHeuhaufen, string $sNadel, int $iOffset = 0): int|false
Parameter im Detail:
-
$sHeuhaufen
Typ: string
Beschreibung: Die zu durchsuchende Zeichenkette.
Beispiel: "index.html"
-
$sNadel
Typ: string
Beschreibung: Das zu suchende Zeichen/Substring.
Wichtig:
-
Vor PHP 8.0.0: Nicht-Strings wurden zu Integer konvertiert (deprecated ab PHP 7.3.0), was die Rückgabe der Position des letzten Vorkommens beeinflusst.).
-
Ab PHP 8.0.0: Leerer String als Nadel ist erlaubt.
Beispiel: "."
-
$iOffset (optional)
Typ: integer
Beschreibung: Bestimmt, ab/bis zu welcher Position gesucht wird.
-
Positiver Wert: Startet die Suche ab dieser Position und durchsucht den restlichen String nach dem letzten Vorkommen.
-
Negativer Wert: Startet die Suche rückwärts ab dieser Position vom Ende aus – begrenzt den Suchbereich auf die letzten $iOffset Zeichen.
Beispiel, um $iOffset zu verstehen:
$sText = "abc.abc.abc";
/** Suche ab Position 4 (ab dem zweiten "abc.") **/
echo strrpos($sText, ".", 4); /** Gibt 7 zurück **/
/** Suche ab -4 Zeichen vom Ende ("abc.abc.[abc]") **/
echo strrpos($sText, ".", -4); /** Gibt 3 zurück **/
III. Der Rückgabewert: Position (Integer) oder false
- Bei Fund: Integer, nullbasiert (Index startet bei 0).
- Bei Nicht-Fund: false
Wichtige Stolperfalle:
0 ist eine gültige Position!
Schreibst du nur if ($iPos), dann wertet PHP 0 als false aus – und du übersiehst Treffer an der ersten Stelle!
Richtig prüfen:
$iPos = strrpos($sText, ".");
if ($iPos !== false) {
/** Treffer korrekt erkannt **/
}
IV. strrpos() in Aktion: Umfassende und praxisnahe Code-Beispiele
Die nächsten Beispiele zeigen dir anschaulich, wie du die Funktion in der Praxis gezielt anwendest.
A. Grundlegendes Beispiel
$sText = "test.example.com";
$iLetzterPunkt = strrpos($sText, ".");
echo $iLetzterPunkt; /** Gibt 12 zurück **/
B. Mit positivem Offset
$sText = "eins.zwei.drei.vier";
$iLetzterPunkt = strrpos($sText, ".", 10); /** Startet Suche ab Index 10 **/
/** Findet Punkt vor "vier", gibt Index 13 zurück **/
C. Mit negativem Offset
$sText = "eins.zwei.drei.vier";
$iLetzterPunkt = strrpos($sText, ".", -5); /** -5: Bereich auf "drei.vier" beschränkt **/
/** Findet Punkt vor "vier", gibt Index 13 zurück **/
D. needle nicht gefunden
$sText = "hello world";
$iPos = strrpos($sText, "x");
if ($iPos === false) {
/** "x" kommt nicht vor **/
}
E. needle an Position 0
$sText = ".htaccess";
$iPos = strrpos($sText, ".");
if ($iPos === false) {
/** Wird NICHT ausgeführt, $iPos ist 0 **/
} else {
/** Richtige Behandlung, Index 0 **/
}
V. Praktische Anwendungsfälle und typische Szenarien
Gerade beim Arbeiten mit Dateinamen ist es oft nützlich, gezielt die Endung herauszufiltern – zum Beispiel, um Dateien zu kategorisieren oder gezielt weiterzuverarbeiten.
A. Dateiendung extrahieren
$sPfad = "images/uploads/photo.jpeg";
$iLetzterPunkt = strrpos($sPfad, ".");
$sEndung = ($iLetzterPunkt !== false) ? substr($sPfad, $iLetzterPunkt + 1) : "";
B. Dateiname aus Pfad
$sPfad = "/var/www/html/index.php";
$iLetzterSlash = strrpos($sPfad, "/");
$sDateiname = ($iLetzterSlash !== false) ? substr($sPfad, $iLetzterSlash + 1) : $sPfad;
/** $sDateiname ist "index.php" **/
C. Letztes Verzeichnis im Pfad
$sPfad = "/home/user/web/images/";
$sClean = rtrim($sPfad, "/");
$iLetzterSlash = strrpos($sClean, "/");
$sVerzeichnis = ($iLetzterSlash !== false) ? substr($sClean, $iLetzterSlash + 1) : $sClean;
/** $sVerzeichnis ist "images" **/
D. Letztes Segment einer URL
$sUrl = "https://domain.de/user/12345";
$iLetzterSlash = strrpos($sUrl, "/");
$sSegment = ($iLetzterSlash !== false) ? substr($sUrl, $iLetzterSlash + 1) : $sUrl;
/** $sSegment ist "12345" **/
E. Suffix-Prüfung
$sDateiname = "beispiel.php";
$bIstPhp = (strrpos($sDateiname, ".php") === strlen($sDateiname) - 4);
VI. Abgrenzung und Vergleich: strrpos() vs. verwandte PHP-String-Funktionen
Die folgende Übersicht macht die Unterschiede der wichtigsten Funktionen für Teilstring-Suchen in PHP auf einen Blick deutlich.
Funktion | Suchrichtung | Case-Sensitivity | Rückgabewert bei Fund | Rückgabewert bei Nicht-Fund |
strrpos() | Letztes | Sensitiv | Position (int) | false |
strpos() | Erstes | Sensitiv | Position (int) | false |
strripos() | Letztes | Insensitiv | Position (int) | false |
stripos() | Erstes | Insensitiv | Position (int) | false |
strrchr() | Letztes (Char) | Sensitiv | String-Teil ab Fund | false |
- strrpos(): Letzte Position, case-sensitive, Rückgabe Integer.
- strpos(): Erste Position, case-sensitive.
- strripos(): Letzte Position, case-insensitive.
- stripos(): Erste Position, case-insensitive.
- strrchr(): Gibt String ab letztem Fundzeichen, nicht Index.
Wer besonders große Datenmengen verarbeitet oder auf maximale Geschwindigkeit angewiesen ist, sollte dennoch verschiedene Ansätze vergleichen und gegebenenfalls spezialisierte Alternativen in Betracht ziehen.
-
Performance: Für typische Anwendungsfälle schnell genug.
-
Alternativen:
- Für Suffix-Checks: str_ends_with() (ab PHP 8.0) ist lesbarer und meist effizienter.
- Für komplexe Muster: preg_match(), aber selten notwendig.
-
Best Practice:
-
Offset bewusst nutzen: Begrenze den Suchbereich, wenn du weißt, dass relevante Daten nur in einem bestimmten Abschnitt liegen.
-
Strikter Vergleich (===): Verhindert Fehler mit 0/false.
-
Lesbarkeit: Schreibe klare, selbsterklärende Variablennamen.
VIII. Wichtig für internationale Anwendungen: Umgang mit Multibyte-Strings (mb_strrpos())
Problem:
strrpos() ist nicht multibyte-sicher. Sonderzeichen (z.B. Umlaute, Emojis, asiatische Schriftzeichen) werden sonst ggf. falsch gezählt.
Lösung:
Verwende mb_strrpos() aus der mbstring-Extension.
Beispiel:
$sText = "naïve façade";
$iLetztesA = strrpos($sText, "a"); /** Kann 7 liefern (falsch) **/
$iLetztesA_MB = mb_strrpos($sText, "a"); /** Liefert korrekt 8 **/
Empfehlung:
Arbeite bei internationalen Anwendungen und UTF-8 immer mit mb_strrpos().
IX. Fehlerbehebung und Vermeidung häufiger Probleme (Troubleshooting Guide)
Viele typische Fehler lassen sich vermeiden, wenn du die Rückgabewerte und den Offset-Parameter genau beachtest – denn gerade hier entstehen in der Praxis die meisten Stolperfallen.
- Unterschied false/0: Immer explizit prüfen, ob das Ergebnis === false ist.
- Offset falsch angewendet: Denke daran, dass negativer Offset die Suche auf das Endsegment beschränkt.
- Zeichenkodierung: Bei Multibyte-Strings drohen Fehler – nutze dann mb_strrpos().
- Case-Sensitivity vergessen? Benötigst du eine Suche ohne Beachtung der Groß-/Kleinschreibung, verwende strripos().
- Altes Verhalten bei Nicht-Strings als needle: Vermeide es, Nicht-Strings zu übergeben (ab PHP 8 irrelevant).
X. Zusammenfassung: Die Kernpunkte zu PHP strrpos() auf einen Blick
Damit behältst du die wichtigsten Erkenntnisse im Blick und kannst die Funktion gezielt sowie fehlerfrei einsetzen.
- strrpos() findet die letzte Position eines Substrings innerhalb eines Strings.
- Case-sensitive: Auf Groß-/Kleinschreibung achten.
- Offset-Parameter bietet mächtige Möglichkeiten für gezielte Suchen.
- Rückgabe: Integer (Position) oder false – immer strikt vergleichen!
- Multibyte-Strings: Für UTF-8 und Co. immer mb_strrpos() nutzen.
- Typische Anwendungsfälle: Dateiendungen, Dateinamen, letzte Segmente in Pfaden, Suffix-Checks.
- Verwandte Funktionen: strpos(), strripos(), strrchr() und ab PHP 8.0: str_ends_with() sind Funktionen, die die Position des letzten Vorkommens ermitteln.
Fazit aus der Praxis:
Wer sauber mit Zeichenketten arbeitet, kommt an strrpos() nicht vorbei. Die Funktion ist unkompliziert, wird aber oft missverstanden – besonders beim Rückgabewert und bei Zeichenkodierungen. Wer die Stolperfallen kennt, kann damit flexibel Dateiendungen, letzte Segmente und Suffixe extrahieren oder prüfen – und bleibt auch für knifflige Aufgaben gerüstet.