Signatur
Beschreibung
quotemeta() fügt vor jedem der folgenden Sonderzeichen einen Backslash (\) ein: . \ + * ? [ ^ ] ( $ ). Dadurch werden diese Zeichen als Literale behandelt, wenn der String anschließend in einem regulären Ausdruck verwendet wird.
Typischer Einsatzfall: Ein vom Benutzer eingegebener Text soll als fester Suchbegriff (kein Muster) in einer preg_match()- oder preg_replace()-Funktion genutzt werden. Anstatt selbst alle Sonderzeichen manuell zu escapen, übernimmt quotemeta() diese Aufgabe automatisch.
Für moderne PCRE-basierte Funktionen (preg_*) ist jedoch preg_quote() vorzuziehen, da diese Funktion einen größeren Zeichensatz sowie den optionalen Delimiter-Parameter unterstützt. quotemeta() deckt lediglich die POSIX/ERE-Metazeichen ab und berücksichtigt keinen Delimiter.
Ist der übergebene String leer, gibt die Funktion false zurück (in PHP < 8.0), ab PHP 8.0 wird ein leerer String zurückgegeben. Dies sollte im Code beachtet werden, wenn leere Eingaben möglich sind.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $string Pflicht | string | Der Eingabe-String, in dem Metazeichen maskiert werden sollen. |
Rückgabewert
false zurückgegeben, ab PHP 8.0 ein leerer String.Beispiele
Einfache Maskierung von Metazeichen
<?php
$userInput = 'Preis: (5+3) * 2.00$';
$escaped = quotemeta($userInput);
echo $escaped;
// Ausgabe: Preis\: \(5\+3\) \* 2\.00\$
Nutzereingabe als Literal in einem regulären Ausdruck suchen
<?php
$text = 'Der Rabatt beträgt (10+5) % auf alle Artikel.';
$search = '(10+5)';
$pattern = '/' . quotemeta($search) . '/i';
if (preg_match($pattern, $text, $matches)) {
echo 'Treffer gefunden: ' . $matches[0];
} else {
echo 'Kein Treffer.';
}
// Wichtig · Fallstricke
Sicherheitshinweis: quotemeta() ist nicht für die Absicherung gegen SQL-Injection oder XSS geeignet. Für PCRE-basierte Funktionen (preg_match, preg_replace etc.) sollte stattdessen preg_quote() verwendet werden, da es einen vollständigeren Zeichensatz (inkl. /, #, ~ etc. je nach Delimiter) maskiert und einen optionalen Delimiter-Parameter unterstützt.
In PHP < 8.0 gibt quotemeta('') den booleschen Wert false zurück, was zu unerwarteten Ergebnissen führen kann, wenn das Ergebnis direkt als String weiterverwendet wird. Ab PHP 8.0 wird ein leerer String zurückgegeben.