addslashes()
Die Funktion addslashes() fügt vor bestimmten Zeichen in einem string Backslashes ein, um sie sicher in Code oder Daten einzubetten.
Die Funktion addslashes() fügt einem string vor bestimmten Zeichen einen Backslash (\) hinzu, damit diese sicher in Code oder Daten eingebettet werden können. Sie maskiert vier Zeichen: das einfache Anführungszeichen ('), das doppelte Anführungszeichen ("), den Backslash (\) selbst und das NUL-Byte (\0). Das ist nützlich, wenn ein string innerhalb eines anderen zitierten Strings eingefügt werden soll, ohne dass die inneren Anführungszeichen die umgebende Syntax unterbrechen.
Syntax
addslashes(string $string): stringDie Funktion nimmt einen einzigen Parameter entgegen — den zu maskierenden string — und gibt einen neuen string mit den eingefügten Backslashes zurück. Der ursprüngliche string bleibt unverändert.
| Parameter | Beschreibung |
|---|---|
$string | Erforderlich. Der zu maskierende string. |
Einfaches Beispiel
Der folgende string enthält sowohl einfache als auch doppelte Anführungszeichen. Wenn er an addslashes() übergeben wird, gibt die Funktion eine Kopie zurück, in der jedes Anführungszeichen maskiert ist:
Die Ausgabe lautet:
This is a string with \'quotes\' and \"double quotes\".Vor jedem ' und " steht jetzt ein Backslash, sodass der string in einen zitierten Kontext eingefügt werden kann, ohne den umgebenden string vorzeitig zu beenden.
Ergebnis mit stripslashes() umkehren
addslashes() ist das Gegenstück zu stripslashes(). Was die erste Funktion einfügt, entfernt die zweite wieder, sodass ein Wert ohne Datenverlust hin- und zurückkonvertiert werden kann:
<?php
$original = "O'Reilly's book costs \$5.";
$escaped = addslashes($original);
$restored = stripslashes($escaped);
echo $escaped . "\n"; // O\'Reilly\'s book costs $5.
echo $restored . "\n"; // O'Reilly's book costs $5.
var_dump($original === $restored); // bool(true)
?>Es werden nur die Backslashes entfernt, die addslashes() selbst eingefügt hat, sodass der wiederhergestellte string exakt mit dem Original übereinstimmt.
Wann sollte man es verwenden?
Verwenden Sie addslashes(), wenn Sie Text innerhalb eines anderen zitierten Strings einbetten müssen — zum Beispiel beim Erstellen eines String-Literals für eine Exportdatei, einen Konfigurations-Schnipsel oder eine Ausgabe, die später von eval() verarbeitet wird (was generell vermieden werden sollte). Es ist ein Formatierungshelfer, keine Maskierungsfunktion, die an ein bestimmtes Ziel gebunden ist.
addslashes() ist keine Sicherheitsfunktion
Dies ist der wichtigste Punkt. addslashes() macht einen string weder für SQL-Abfragen noch für HTML-Ausgaben sicher, und die Verwendung auf diese Weise macht Ihre Anwendung angreifbar:
- Für Datenbankabfragen verwenden Sie Prepared Statements mit PDO oder
mysqliodermysqli_real_escape_string()als veralteten Maskierungsansatz. Im Gegensatz zuaddslashes()istmysqli_real_escape_string()verbindungs- und zeichensatz-abhängig. - Für HTML-Ausgaben verwenden Sie
htmlspecialchars(), um<,>,&und Anführungszeichen zu neutralisieren.
addslashes() ist zudem nicht Multibyte-fähig: Die Funktion arbeitet byte-weise und kann Strings in Kodierungen wie Shift-JIS oder GBK beschädigen oder falsch maskieren — genau deshalb darf sie nicht für SQL-Sicherheit eingesetzt werden.
Verwandte Funktionen
stripslashes()— entfernt die vonaddslashes()hinzugefügten Backslashes.addcslashes()— ermöglicht die genaue Auswahl der zu maskierenden Zeichen.quotemeta()— maskiert Metazeichen regulärer Ausdrücke.htmlspecialchars()— maskiert Zeichen mit besonderer Bedeutung in HTML.