Start · Sprachen · PHP · Referenz · mb_strrchr

mb_strrchr

Funktion

Sucht das letzte Vorkommen eines Zeichens in einem Multibyte-String und gibt den Teilstring ab dieser Position zurück.

seit PHP 5.2.0 Kategorie: string

Signatur

mb_strrchr(string $haystack, string $needle, bool $before_needle = false, ?string $encoding = null): string|false

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

Typ
string|false
Beschreibung
Gibt den gefundenen Teilstring zurück. Falls $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
.pptx 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
/dateien /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;
}
Zeichen nicht gefunden.

// 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.