Signatur
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
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!
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]
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.
// 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.