Start · Sprachen · PHP · Referenz · mb_ereg_replace

mb_ereg_replace

Funktion

Ersetzt Vorkommen eines regulären Ausdrucks in einem String mit Unterstützung für Multibyte-Zeichenkodierungen (z. B. UTF-8).

seit PHP 4.2.0 Kategorie: string

Signatur

mb_ereg_replace(string $pattern, string $replacement, string $string, string $options = 'msr'): string|false|null

Beschreibung

mb_ereg_replace() durchsucht den übergebenen String $string nach dem regulären Ausdruck $pattern und ersetzt alle Treffer durch $replacement. Im Gegensatz zu preg_replace() basiert diese Funktion auf der POSIX-ähnlichen Regex-Engine von mbregex und unterstützt nativ Multibyte-Zeichensätze wie UTF-8, EUC-JP oder Shift_JIS, ohne dass spezielle Modifier notwendig sind.

Die aktuell eingestellte interne Zeichenkodierung (gesetzt via mb_internal_encoding() oder mb_regex_encoding()) bestimmt, wie Muster und Strings interpretiert werden. Dies ist besonders relevant bei Sprachen wie Japanisch, Chinesisch oder Arabisch, bei denen einzelne Zeichen mehrere Bytes belegen.

Im Parameter $replacement kann mit \1, \2 usw. auf Capture-Gruppen aus dem Muster zurückgegriffen werden. Zusätzlich lassen sich mit dem Optionsparameter Verhaltensweisen wie Groß-/Kleinschreibungsignorierung (i), Multiline-Modus (m), Dot-All-Modus (s) oder erweiterter Modus (x) steuern.

Für sicherheitskritischen Code ist mb_eregi_replace() (case-insensitive Variante) und insbesondere das Verwenden von e-Option in $options mit äußerster Vorsicht zu genießen, da diese Code-Ausführung aus dem Replacement-String ermöglicht und daher als gefährlich gilt.

Parameter

Name Typ Default Beschreibung
$pattern Pflicht string Der reguläre Ausdruck (POSIX-erweitertes Format), nach dem gesucht wird. Multibyte-Zeichen im Muster werden gemäß der aktuell eingestellten Regex-Kodierung interpretiert.
$replacement Pflicht string Der Ersetzungsstring. Rückverweise auf Capture-Gruppen sind mit \1 bis \9 möglich. Achtung: Bei Option e wird dieser String als PHP-Code ausgewertet — dies ist ein erhebliches Sicherheitsrisiko.
$string Pflicht string Der Eingabe-String, in dem die Ersetzung vorgenommen wird.
$options string msr Optionsbuchstaben als String: i (Groß-/Kleinschreibung ignorieren), m (Multiline), s (Singleline/Dot-All), x (erweiterter Modus), r (POSIX-Modus), z (Unix-Zeilenende), e (Replacement als PHP-Code auswerten — veraltet und gefährlich, nicht verwenden).

Rückgabewert

Typ
string|false|null
Beschreibung
Gibt den veränderten String zurück, wenn die Ersetzung erfolgreich war. Gibt false zurück, wenn ein Fehler aufgetreten ist. Gibt null zurück, wenn ein ungültiger Parameter übergeben wurde (ab PHP 8.0).

Beispiele

Einfaches Ersetzen in einem UTF-8-String

<?php
mb_internal_encoding('UTF-8');

$string = 'Hallo Welt! Guten Tag, Welt!';
$result = mb_ereg_replace('Welt', 'PHP', $string);

echo $result;
// Ausgabe: Hallo PHP! Guten Tag, PHP!
Hallo PHP! Guten Tag, PHP!

Multibyte-Zeichen und Capture-Gruppen

<?php
mb_internal_encoding('UTF-8');

// Japanische Zeichen durch Regex ersetzen (Katakana -> Platzhalter)
$string = 'ユーザー名: テスト';
// Ersetze alles nach dem Doppelpunkt
$result = mb_ereg_replace(': (.+)', ': [GESCHWÄRZT]', $string);

echo $result;
// Ausgabe: ユーザー名: [GESCHWÄRZT]
ユーザー名: [GESCHWÄRZT]

Case-insensitives Ersetzen mit Option 'i'

<?php
mb_internal_encoding('UTF-8');

$string = 'PHP ist toll. php macht Spaß. Php rockt.';
$result = mb_ereg_replace('php', 'Python', $string, 'msi');

echo $result;
// Ausgabe: Python ist toll. Python macht Spaß. Python rockt.
Python ist toll. Python macht Spaß. Python rockt.

// Wichtig · Fallstricke

Sicherheitswarnung: Die Option e im Parameter $options bewirkt, dass der Replacement-String als PHP-Code ausgeführt wird. Dies öffnet bei unkontrollierten Eingaben eine massive Remote-Code-Execution-Lücke. Diese Option ist seit PHP 7.1 als veraltet markiert (deprecated) und wurde in PHP 8.0 entfernt. Nutzen Sie stattdessen mb_ereg_replace_callback().

Seit PHP 8.0 gibt die Funktion bei ungültigen Argumenten null statt false zurück — prüfen Sie den Rückgabewert entsprechend mit === false oder === null.

Für viele Anwendungsfälle ist preg_replace() mit dem u-Modifier (z. B. /muster/u) eine modernere und besser dokumentierte Alternative, die ebenfalls UTF-8 unterstützt. mb_ereg_replace() empfiehlt sich vor allem dann, wenn bereits eine auf mbregex aufbauende Codebasis existiert oder spezifische Zeichenkodierungen jenseits von UTF-8 benötigt werden.