addcslashes

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

addcslashesEscapa una cadena al estilo de C

Descripción

addcslashes(string $str, string $charlist): string

Devuelve un string con barras invertidas antes de los caracteres que aparecen en el parámetro charlist

Parámetros

str

El string a escapar.

charlist

Una lista de caracteres que serán escapados. Si charlist contiene caracteres como \n, \r etc., serán convertidos al estilo de C, mientras que otros caracteres no alfanuméricos con código ASCII inferior a 32 y superior a 126 serán convertidos a representación octal.

Cuando se defina una secuencia de caracteres en el argumento charlist, asegúrese de conocer los caracteres que hay entre los caracteres de inicio y final del rango establecido.

<?php
echo addcslashes('foo[ ]', 'A..z');
// salida: \f\o\o\[ \]
// Serán escapadas todas las letras mayúsculas y minúsculas
// ... pero también [\]^_`
?>
Además, si el primer carácter del rango tiene un valor ASCII superior al segundo carácter del rango, este no se podrá construir. Solamente serán escapados los caracteres de inicio, fin y el punto. Use la función ord() para encontrar el valor ASCII de un carácter.
<?php
echo addcslashes("zoo['.']", 'z..A');
// salida: \zoo['\.']
?>

Ojo si se opta por escapar los caracteres 0, a, b, f, n, r, t y v. Estos se convertirán en \0, \a, \b, \f, \n, \r, \t and \v, que son todos secuencias de escape predefinidas en C. Muchas de estas secuencias tambíen están definidas en otros lenguajes derivados de C, incluyendo PHP, lo que significa que no se podría obtener el resultado deseado si se usa la salida de addcslashes() para generar código en tales lenguajes con los caracteres definidos en charlist.

Valores devueltos

Devuelve el string escapado.

Historial de cambios

Versión Descripción
5.2.5 Se añadieron las secuencias de escape \v y \f.

Ejemplos

Un rango en charlist como "\0..\37", escaparía a todos los caracteres con código ASCII entre 0 y 31.

Ejemplo #1 Ejemplo de addcslashes()

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

Ver también

add a note add a note

User Contributed Notes 6 notes

up
10
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
2
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.
up
0
glitchmr at myopera dot com
11 years ago
If you need JS escaping function, use json_encode() instead.
up
-4
vishal dot ceeng at gmail dot com
5 years ago
echo addcslashes("zoo['.']", 'z..A');

Above code will create an error as per below

Invalid '..'-range, '..'-range needs to be incrementing -
up
-7
Johannes
17 years ago
Be carefull with adding the \ to the list of encoded characters. When you add it at the last position it encodes all encoding slashes. I got a lot of \\\ by this mistake.

So always encode \ at first.
To Top