International PHP Conference Berlin 2025

addcslashes

(PHP 4, PHP 5, PHP 7, PHP 8)

addcslashesStellt bestimmten Zeichen eines Strings ein "\" voran (wie in C)

Beschreibung

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

Gibt eine Zeichenkette zurück, in der allen Zeichen, die in characters aufgeführt sind, ein "\" vorangestellt ist.

Parameter-Liste

string

Die zu maskierende Zeichenkette.

characters

Eine Liste der zu maskierenden Zeichen. Wenn characters Zeichen wie \n, \r etc. enthält, werden diese im C-Stil konvertiert, während andere nicht-alphanumerische Zeichen mit einem ASCII-Wert kleiner als 32 oder größer als 126 in ihre oktale Repräsentation umgewandelt werden.

Wenn im Parameter characters eine Folge von Zeichen definiert wird, sollte bekannt sein, welche Zeichen zwischen den Zeichen liegen, die als Anfang und Ende des Bereichs festgelegt wurden.

<?php
echo addcslashes('foo[ ]', 'A..z');
// Ausgabe: \f\o\o\[ \]
// Alle groß- und kleingeschriebenen Buchstaben werden maskiert
// ... aber ebenfalls die Zeichen [\]^_`
?>
Es ist außerdem zu beachten, dass keine Sequenz erstellt wird, wenn das erste Zeichen einer Sequenz einen höheren ASCII-Wert hat, als das zweite. In diesem Fall werden nur das erste und das letzte Zeichen sowie Punkte maskiert. Um den ASCII-Wert eines Zeichens zu ermitteln, kann die Funktion ord() verwendet werden.
<?php
echo addcslashes("zoo['.']", 'z..A');
// Ausgabe: \zoo['\.']
?>

Besondere Vorsicht ist geboten, wenn die Zeichen 0, a, b, f, n, r, t und v maskiert werden sollen. Sie werden zu \0, \a, \b, \f, \n, \r, \t oder \v umgewandelt, die in C sämtlich vordefinierte Escape-Sequenzen sind. Viele dieser Sequenzen sind auch in anderen von C abgeleiteten Sprachen, einschließlich PHP, vordefiniert. Das bedeutet, dass möglicherweise nicht das gewünschte Ergebnis erreicht wird, wenn die Rückgabe von addcslashes() verwendet wird, um mit diesen in characters definierten Zeichen Code in diesen Sprachen zu erzeugen.

Rückgabewerte

Gibt die maskierte Zeichenkette zurück.

Beispiele

characters-Angaben wie "\0..\37" (oktal) bewirken ein Maskieren aller Zeichen mit einem ASCII-Code zwischen 0 und 31 (dezimal).

Beispiel #1 addcslashes()-Beispiel

<?php
$maskiert
= addcslashes($nicht_maskiert, "\0..\37!@\177..\377");
?>

Siehe auch

add a note

User Contributed Notes 3 notes

up
7
phpcoder at cyberpimp dot pimpdomain dot com
19 years ago
If you are using addcslashes() to encode text which is to later be decoded back to it's original form, you MUST specify the backslash (\) character in charlist!

Example:

<?php
$originaltext
= 'This text does NOT contain \\n a new-line!';
$encoded = addcslashes($originaltext, '\\');
$decoded = stripcslashes($encoded);
//$decoded now contains a copy of $originaltext with perfect integrity
echo $decoded; //Display the sentence with it's literal \n intact
?>

If the '\\' was not specified in addcslashes(), any literal \n (or other C-style special character) sequences in $originaltext would pass through un-encoded, but then be decoded into control characters by stripcslashes() and the data would lose it's integrity through the encode-decode transaction.
up
3
stein at visibone dot com
17 years ago
addcslashes() treats NUL as a string terminator:

assert("any" === addcslashes("any\0body", "-"));

unless you order it backslashified:

assert("any\\000body" === addcslashes("any\0body", "\0"));

(Uncertain whether this should be declared a bug or simply that addcslashes() is not binary-safe, whatever that means.)
up
1
natNOSPAM at noworrie dot NO_SPAM dot com
22 years ago
I have found the following to be much more appropriate code example:

<?php
$escaped
= addcslashes($not_escaped, "\0..\37!@\@\177..\377");
?>

This will protect original, innocent backslashes from stripcslashes.
To Top