Start · Sprachen · PHP · Referenz · iconv_strrpos

iconv_strrpos

Funktion

Sucht die Position des <em>letzten</em> Vorkommens einer Zeichenkette (<code>$needle</code>) in einem anderen String (<code>$haystack</code>) unter Berücksichtigung einer definierten Zeichenkodierung.

seit PHP 5.0.0 Kategorie: string

Signatur

iconv_strrpos(string $haystack, string $needle, string $encoding = ''): int|false

Beschreibung

iconv_strrpos() arbeitet ähnlich wie die Standard-PHP-Funktion strrpos(), ist jedoch multibyte-sicher und unterstützt beliebige Zeichenkodierungen wie UTF-8, ISO-8859-1, Shift_JIS usw. Die zurückgegebene Position ist die Anzahl der Zeichen (nicht Bytes) vom Anfang des $haystack.

Die Funktion ist besonders nützlich, wenn man mit Nicht-ASCII-Texten arbeitet, bei denen ein einzelnes Zeichen mehrere Bytes belegen kann. Im Unterschied zu strrpos() kann iconv_strrpos() jedoch kein einzelnes Zeichen als Nadel annehmen, sondern stets einen vollständigen String.

Wird kein $encoding-Parameter übergeben oder ein leerer String angegeben, wird die mit iconv_set_encoding() bzw. der INI-Direktive iconv.internal_encoding eingestellte interne Kodierung verwendet.

Im Gegensatz zu iconv_strpos() liefert diese Funktion die Position des letzten statt des ersten Vorkommens der Nadel und ist damit ideal, wenn man z. B. das letzte Trennzeichen oder den letzten Teilstring in einem Text ermitteln möchte.

Parameter

Name Typ Default Beschreibung
$haystack Pflicht string Der Ausgangstring, in dem gesucht wird.
$needle Pflicht string Der gesuchte Teilstring. Im Gegensatz zu strrpos() wird hier kein Integer-Wert als Zeichencode akzeptiert, sondern ausschließlich ein String.
$encoding string Die zu verwendende Zeichenkodierung (z. B. 'UTF-8', 'ISO-8859-1'). Wird ein leerer String oder gar kein Wert übergeben, wird die interne iconv-Kodierung verwendet.

Rückgabewert

Typ
int|false
Beschreibung
Gibt die Position des letzten Vorkommens von $needle als ganzzahligen Zeichenoffset (0-basiert) zurück. Wird $needle nicht gefunden, wird false zurückgegeben. Achtung: Da Position 0 ebenfalls ein gültiger Rückgabewert ist, muss mit === auf false geprüft werden.

Beispiele

Letztes Vorkommen in einem UTF-8-String finden

<?php
$text = 'Das ist ein Beispiel. Ein weiteres Beispiel.';
$pos  = iconv_strrpos($text, 'Beispiel', 'UTF-8');

if ($pos !== false) {
    echo "Letztes Vorkommen von 'Beispiel' an Position: " . $pos;
} else {
    echo "Nicht gefunden.";
}
Letztes Vorkommen von 'Beispiel' an Position: 36

Multibyte-Zeichen (Umlaute) korrekt verarbeiten

<?php
// String mit Umlauten – hier wäre strrpos() unzuverlässig
$text = 'Größe: mittelgroß, übergroß';
$pos  = iconv_strrpos($text, 'groß', 'UTF-8');

if ($pos !== false) {
    echo "Position des letzten 'groß': " . $pos . PHP_EOL;
    // Teilstring ab letztem Vorkommen ausgeben
    echo iconv_substr($text, $pos, null, 'UTF-8');
} else {
    echo "Nicht gefunden.";
}
Position des letzten 'groß': 23 groß

Prüfung auf false mit striktem Vergleich (Fallstrick Position 0)

<?php
$haystack = 'Hallo Welt';
$needle   = 'Hallo';
$pos      = iconv_strrpos($haystack, $needle, 'UTF-8');

// Wichtig: strikter Vergleich mit ===
if ($pos === false) {
    echo "Nicht gefunden.";
} else {
    echo "Gefunden an Position: " . $pos; // 0
}
Gefunden an Position: 0

// Wichtig · Fallstricke

Fallstrick bei false-Prüfung: Da Position 0 ein gültiger Rückgabewert ist, führt ein loser Vergleich (== false) zu falschen Ergebnissen. Immer === false verwenden.

Needle darf kein leerer String sein: Wird ein leerer String als $needle übergeben, gibt die Funktion false zurück (kein Fehler, aber auch kein sinnvolles Ergebnis).

Performance: Für sehr lange Strings in Schleifen kann iconv_strrpos() langsamer sein als mbstring-Äquivalente (mb_strrpos()). In modernen Projekten wird mb_strrpos() häufig bevorzugt, da die mbstring-Erweiterung verbreiteter und aktiver gepflegt ist.