Start · Sprachen · PHP · Referenz · mb_strrpos

mb_strrpos

Funktion

Gibt die Position des <strong>letzten</strong> Vorkommens von <code>$needle</code> in <code>$haystack</code> als Byte-sichere Multibyte-Variante zurück.

seit PHP 4.0.6 Kategorie: string

Signatur

mb_strrpos(string $haystack, string $needle, int $offset = 0, ?string $encoding = null): int|false

Beschreibung

mb_strrpos() durchsucht den Eingabe-String $haystack von rechts nach links und liefert die Zeichenposition (nicht Byte-Offset) des letzten Vorkommens von $needle. Im Gegensatz zur Ein-Byte-Funktion strrpos() berücksichtigt sie Multibyte-Zeichensätze wie UTF-8 oder EUC-JP korrekt und vermeidet so Fehler bei Nicht-ASCII-Zeichen.

Der optionale Parameter $offset gibt an, ab welcher Zeichenposition (von links gezählt) mit der Suche begonnen werden soll. Ein negativer Wert verschiebt den Startpunkt entsprechend vom Ende des Strings. Die Funktion ist case-sensitive – für eine Suche ohne Berücksichtigung der Groß-/Kleinschreibung steht mb_strripos() zur Verfügung.

Typische Anwendungsfälle sind das Ermitteln des letzten Schrägstrichs in einem Dateipfad, das Finden des letzten Leerzeichens zur Silbentrennung oder allgemein die Rückwärtssuche in mehrsprachigen Texten, die Zeichen außerhalb des ASCII-Bereichs enthalten.

Gibt die Funktion false zurück, wurde $needle nicht gefunden. Da Position 0 ebenfalls ein gültiges Ergebnis ist, muss der Rückgabewert mit === (strikte Gleichheit) verglichen werden.

Parameter

Name Typ Default Beschreibung
$haystack Pflicht string Der zu durchsuchende Eingabe-String.
$needle Pflicht string Der gesuchte Teilstring. Seit PHP 8.0 sind auch leere Strings als $needle erlaubt.
$offset int 0 Startposition der Suche in Zeichen (nicht Bytes). Ein positiver Wert beginnt die Suche ab dieser Position von links; ein negativer Wert setzt den Startpunkt vom Ende des Strings.
$encoding ?string null Zeichenkodierung, z. B. 'UTF-8' oder 'EUC-JP'. Wird null übergeben oder der Parameter weggelassen, verwendet PHP die mit mb_internal_encoding() gesetzte interne Kodierung.

Rückgabewert

Typ
int|false
Beschreibung
Gibt die nullbasierte Zeichenposition (nicht Byte-Offset) des letzten Vorkommens von $needle in $haystack zurück. Wird $needle nicht gefunden, ist der Rückgabewert false. Wichtig: Immer mit === auf false prüfen, da Position 0 ebenfalls falsy ist.

Beispiele

Letztes Vorkommen eines Zeichens in einem UTF-8-String finden

<?php
$text = 'Schöne Grüße aus München';
$pos  = mb_strrpos($text, 'ü', 0, 'UTF-8');

if ($pos !== false) {
    echo "Letztes 'ü' an Position: " . $pos . PHP_EOL;
    echo "Reststring ab dort: " . mb_substr($text, $pos, null, 'UTF-8') . PHP_EOL;
} else {
    echo "Nicht gefunden." . PHP_EOL;
}
Letztes 'ü' an Position: 17 Reststring ab dort: ünchen

Dateinamen aus einem Pfad mit Multibyte-Zeichen extrahieren

<?php
mb_internal_encoding('UTF-8');

$pfad = '/var/www/html/биография/индекс.php';
$pos  = mb_strrpos($pfad, '/');

if ($pos !== false) {
    $dateiname = mb_substr($pfad, $pos + 1);
    echo 'Dateiname: ' . $dateiname . PHP_EOL;
}
Dateiname: индекс.php

Suche mit negativem Offset

<?php
// Nur innerhalb der letzten 10 Zeichen suchen
$text = 'PHP ist toll – PHP macht Spaß';
$pos  = mb_strrpos($text, 'PHP', -10, 'UTF-8');

var_dump($pos); // Sucht nur in den letzten 10 Zeichen
bool(false)

// Wichtig · Fallstricke

Strikte Vergleiche verwenden: Da Position 0 (Treffer ganz am Anfang) in einem booleschen Kontext als false gewertet wird, muss der Rückgabewert immer mit === false geprüft werden, niemals mit == false oder als einfache if-Bedingung ohne Vergleich.

Kodierung beachten: Wird keine Kodierung übergeben, greift die interne Kodierung (standardmäßig oft ISO-8859-1). Für Webanwendungen empfiehlt es sich, entweder explizit 'UTF-8' zu übergeben oder einmalig mb_internal_encoding('UTF-8') zu setzen.

Performance: Bei sehr langen Strings kann eine Rückwärtssuche teurer sein als eine Vorwärtssuche. Ist nur das erste Vorkommen relevant, ist mb_strpos() vorzuziehen.