Start · Sprachen · PHP · Referenz · addcslashes

addcslashes

Funktion

Stellt bestimmten Zeichen eines Strings ein Backslash (<code>\</code>) voran – ähnlich dem Escaping in der Programmiersprache C.

seit PHP 4.0.0 Kategorie: string

Signatur

addcslashes(string $string, string $characters): string

Beschreibung

addcslashes() durchsucht den übergebenen String und fügt vor allen Zeichen, die in $characters angegeben sind, einen Backslash (\) ein. Die Funktion ist nützlich, wenn Strings für Kontexte vorbereitet werden müssen, die C-ähnliches Escaping erwarten – etwa bestimmte Datenbankabfragen, Konfigurationsdateien oder eigene DSLs.

Im Parameter $characters können einzelne Zeichen oder Bereiche im Format A..Z (zwei Punkte zwischen Start- und Endzeichen) angegeben werden. Bereiche werden anhand der ASCII-Werte der Zeichen aufgelöst. So steht A..Z für alle Großbuchstaben von A bis Z.

Zeichen mit einem ASCII-Wert unter 32 oder über 126 werden mit einer oktalen Darstellung escapt (z. B. \007). Zu beachten ist, dass auch die Zeichen \0, \a, \b, \f, \n, \r, \t und \v besondere Darstellungen erhalten, wenn sie in den Zeichenbereich fallen.

Das Gegenstück zu addcslashes() ist stripcslashes(), das die eingefügten Backslashes wieder entfernt. Für den allgemeineren Einsatz – etwa das Escaping in SQL oder HTML – sind spezialisierte Funktionen wie mysqli_real_escape_string() oder htmlspecialchars() vorzuziehen.

Parameter

Name Typ Default Beschreibung
$string Pflicht string Der Eingabe-String, in dem Zeichen mit einem Backslash versehen werden sollen.
$characters Pflicht string Eine Liste der zu escapenden Zeichen. Bereiche können mit zwei Punkten angegeben werden, z. B. a..z für alle Kleinbuchstaben. Die Angabe ist case-sensitiv.

Rückgabewert

Typ
string
Beschreibung
Gibt den modifizierten String zurück, in dem vor allen in $characters definierten Zeichen ein Backslash eingefügt wurde.

Beispiele

Einfaches Escaping einzelner Zeichen

<?php
$text = "Hallo Welt! Wie geht's?";
$escaped = addcslashes($text, "!'?");
echo $escaped;
Hallo Welt\! Wie geht\'s\?

Escaping eines Zeichenbereichs (alle Großbuchstaben)

<?php
$text = "PHP Ist Toll";
$escaped = addcslashes($text, 'A..Z');
echo $escaped;
\P\H\P \Ist \Toll

Kombination aus Einzelzeichen und Bereichen

<?php
// Alle Kleinbuchstaben und das @-Zeichen escapen
$email = "user@example.com";
$escaped = addcslashes($email, 'a..z@');
echo $escaped;
\u\s\e\r\@\e\x\a\m\p\l\e.\c\o\m

// Wichtig · Fallstricke

Sicherheitshinweis: addcslashes() ist keine geeignete Funktion zum Schutz vor SQL-Injection oder XSS. Für SQL sollte stets mysqli_real_escape_string() oder PDO mit Prepared Statements verwendet werden; für HTML-Ausgaben ist htmlspecialchars() korrekt.

Vorsicht bei Bereichen: Der Bereich wird anhand der ASCII-Tabelle aufgelöst. Ein Bereich wie A..z enthält nicht nur Buchstaben, sondern auch die dazwischenliegenden Sonderzeichen ([, \, ], ^, _, `). Ungewollte Zeichen können so unbeabsichtigt escapt werden.

Wenn $characters einen Backslash (\) enthält, wird dieser ebenfalls escapt, was zu doppelten Backslashes im Ergebnis führen kann.