Signatur
Beschreibung
grapheme_strripos() durchsucht den String $haystack rückwärts nach dem letzten Vorkommen von $needle, wobei Groß- und Kleinschreibung ignoriert wird. Die Rückgabe ist die Position in Graphem-Einheiten (nicht Bytes oder Zeichen), was bei mehrsprachigen Texten mit kombinierten Unicode-Zeichen entscheidend ist.
Im Gegensatz zu strrpos() oder mb_strripos() arbeitet diese Funktion vollständig Unicode-korrekt auf Graphem-Ebene. Das bedeutet, dass zusammengesetzte Zeichen (z. B. Buchstaben mit Akzenten, die aus mehreren Code-Points bestehen) als eine einzige Einheit gezählt werden.
Der optionale Parameter $offset legt fest, ab welcher Graphem-Position mit der Suche begonnen wird. Ein positiver Wert startet die Suche von Anfang des Strings, ein negativer Wert vom Ende. Die Funktion ist besonders nützlich für Anwendungen mit internationalen Inhalten wie arabischen, chinesischen oder kombinierten lateinischen Texten mit Diakritika.
Diese Funktion erfordert die intl-Erweiterung. Ist diese nicht geladen, steht die Funktion nicht zur Verfügung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $haystack Pflicht | string | Der Eingabe-String, in dem gesucht wird. Muss eine gültige UTF-8-kodierte Zeichenkette sein. | |
| $needle Pflicht | string | Der gesuchte Teilstring. Die Suche erfolgt ohne Beachtung der Groß-/Kleinschreibung auf Graphem-Ebene. | |
| $offset | int | 0 | Optionaler Startversatz in Graphem-Einheiten. Bei einem positiven Wert wird ab dieser Position von links gesucht; bei einem negativen Wert wird die Suche um so viele Grapheme vom Ende des Strings eingeschränkt. |
Rückgabewert
$needle in $haystack als Integer (Graphem-Index, nullbasiert) zurück. Wird $needle nicht gefunden, wird false zurückgegeben. Bei der Auswertung des Rückgabewerts sollte stets der strikte Vergleich (===) verwendet werden, da Position 0 sonst fälschlicherweise als false interpretiert werden kann.Beispiele
Letztes Vorkommen in einem einfachen UTF-8-String finden
<?php
$haystack = 'Héllo Wörld, héllo PHP';
$needle = 'HÉLLO';
$pos = grapheme_strripos($haystack, $needle);
if ($pos !== false) {
echo "Letztes Vorkommen an Graphem-Position: " . $pos . PHP_EOL;
} else {
echo "Nicht gefunden." . PHP_EOL;
}
// Ausgabe: Letztes Vorkommen an Graphem-Position: 13
Suche mit negativem Offset
<?php
$haystack = 'café Café CAFÉ';
$needle = 'café';
// Suche nur innerhalb der ersten 9 Grapheme (negativer Offset schränkt Ende ein)
$pos = grapheme_strripos($haystack, $needle, -5);
if ($pos !== false) {
echo "Position: " . $pos . PHP_EOL;
} else {
echo "Innerhalb des eingeschränkten Bereichs nicht gefunden." . PHP_EOL;
}
Kombinierende Diakritika: Graphem-Zählung vs. Byte-Zählung
<?php
// 'ä' als kombinierter Code-Point (a + Combining Diaeresis) zählt als 1 Graphem
$haystack = "a\u{0308}bc a\u{0308}BC"; // äbc äBC
$needle = "A\u{0308}BC"; // ÄBC
$pos = grapheme_strripos($haystack, $needle);
echo "Graphem-Position: " . $pos . PHP_EOL;
// Ohne grapheme_*-Funktionen würde die Byte-Länge ein falsches Ergebnis liefern
// Wichtig · Fallstricke
Strikter Vergleich erforderlich: Da die Funktion false zurückgibt, wenn kein Treffer gefunden wird, und 0 bei einem Treffer an erster Position, muss der Rückgabewert immer mit === false geprüft werden, um Verwechslungen zu vermeiden.
intl-Erweiterung: Die Funktion gehört zur PHP-intl-Erweiterung. Diese muss in der php.ini mit extension=intl aktiviert sein. Ohne sie steht grapheme_strripos() nicht zur Verfügung, und es wird ein fataler Fehler ausgelöst.
Nur UTF-8: Sowohl $haystack als auch $needle müssen gültige UTF-8-Strings sein. Ungültige Eingaben können zu unerwarteten Ergebnissen oder false führen.
Keine Locale-Abhängigkeit: Die Groß-/Kleinschreibungskonversion erfolgt nach Unicode-Standard (ICU), nicht nach der aktuellen Systemlocale. Das Verhalten ist daher plattformübergreifend konsistent.