Signatur
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
$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.";
}
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.";
}
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
}
// 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.