Signatur
Beschreibung
mb_strrchr durchsucht den String $haystack nach dem letzten Vorkommen des ersten Zeichens aus $needle und gibt den Teilstring ab dieser Fundstelle bis zum Ende des Strings zurück. Die Funktion arbeitet zeichenbasiert, d.h. es wird nur das erste Zeichen von $needle zur Suche verwendet.
Im Gegensatz zur byte-orientierten Funktion strrchr berücksichtigt mb_strrchr Multibyte-Zeichenkodierungen (z.B. UTF-8, UTF-16), sodass auch Sonderzeichen, Umlaute oder Zeichen aus CJK-Zeichensätzen korrekt verarbeitet werden. Ohne diese Funktion würden Multibyte-Zeichen falsch interpretiert werden.
Mit dem Parameter $before_needle lässt sich steuern, ob der Teilstring vor oder ab dem gefundenen Zeichen zurückgegeben werden soll. Wird true übergeben, erhält man den Teil des Strings, der vor dem letzten Vorkommen liegt (das Zeichen selbst ist nicht enthalten).
Typische Anwendungsfälle sind das Extrahieren von Dateiendungen, Verzeichnisnamen oder anderen Teilstrings in internationalisierten Anwendungen, bei denen Zeichen aus verschiedenen Sprachen vorkommen können.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $haystack Pflicht | string | Der Eingabe-String, in dem gesucht wird. | |
| $needle Pflicht | string | Das Suchzeichen. Es wird nur das erste Zeichen dieses Strings als Suchzeichen verwendet. | |
| $before_needle | bool | false | Gibt an, welcher Teil des Strings zurückgegeben wird. Bei false (Standard) wird der Teilstring ab dem letzten Vorkommen (inklusive des Zeichens selbst) zurückgegeben. Bei true wird der Teilstring vor dem letzten Vorkommen (ohne das Zeichen) zurückgegeben. |
| $encoding | ?string | null | Die zu verwendende Zeichenkodierung, z.B. 'UTF-8'. Wird null übergeben oder der Parameter weggelassen, wird die interne Multibyte-Kodierung verwendet, die mit mb_internal_encoding() gesetzt wurde. |
Rückgabewert
$needle nicht in $haystack gefunden wird, wird false zurückgegeben.Beispiele
Dateiendung aus einem Dateinamen extrahieren
<?php
$dateiname = 'dokument.präsentation.pptx';
// Gibt den Teil ab dem letzten Punkt zurück (inklusive Punkt)
$endung = mb_strrchr($dateiname, '.', false, 'UTF-8');
echo $endung; // .pptx
// Gibt den Teil vor dem letzten Punkt zurück (ohne Punkt)
$name = mb_strrchr($dateiname, '.', true, 'UTF-8');
echo $name; // dokument.präsentation
Letztes Verzeichnis aus einem Pfad mit Sonderzeichen ermitteln
<?php
mb_internal_encoding('UTF-8');
$pfad = '/var/www/höme/benutzér/dateien';
// Teil ab dem letzten Schrägstrich (inklusive)
$letzterTeil = mb_strrchr($pfad, '/');
echo $letzterTeil . PHP_EOL; // /dateien
// Teil vor dem letzten Schrägstrich (ohne)
$verzeichnis = mb_strrchr($pfad, '/', true);
echo $verzeichnis . PHP_EOL; // /var/www/höme/benutzér
Rückgabe false bei nicht gefundenem Zeichen
<?php
$text = 'Hallo Welt';
$ergebnis = mb_strrchr($text, 'ü', false, 'UTF-8');
if ($ergebnis === false) {
echo 'Zeichen nicht gefunden.';
} else {
echo $ergebnis;
}
// Wichtig · Fallstricke
Achtung: Es wird stets nur das erste Zeichen von $needle als Suchzeichen verwendet. Mehrere Zeichen in $needle werden ignoriert. Dies unterscheidet mb_strrchr von mb_strrstr-ähnlichen Funktionen, die nach einem vollständigen Teilstring suchen würden.
Der Vergleich ist case-sensitiv. Für eine Suche ohne Berücksichtigung der Groß-/Kleinschreibung steht mb_strrichr zur Verfügung.
Wird eine ungültige Zeichenkodierung angegeben, gibt die Funktion false zurück und erzeugt eine PHP-Warnung. Stellen Sie sicher, dass die verwendete Kodierung korrekt und konsistent ist.