addcslashes

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

addcslashesAñade barras invertidas a un string, al estilo del lenguaje C

Descripción

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

Devuelve el string string, después de haber añadido barras invertidas antes de todos los caracteres que están presentes en la lista characters.

Parámetros

string

El string a escapar.

characters

Una lista de caracteres a escapar. Si characters contiene los caracteres \n, \r etc., serán convertidos al estilo del lenguaje C, mientras que otros caracteres no alfanuméricos con un código ASCII inferior a 26 y superior a 126 son reemplazados por su representación octal.

Al definir una secuencia de caracteres en el parámetro characters, asegúrese de que conoce bien todos los caracteres que se encuentran entre los límites de los intervalos.

Ejemplo #1 addcslashes() con rangos

<?php
echo addcslashes('foo[ ]', 'A..z');
// Muestra: \f\o\o\[ \]
// Todas las mayúsculas y minúsculas serán escapadas
// ... pero también los caracteres [\]^_`
?>
Asimismo, si el primer carácter de un intervalo tiene un código ASCII mayor que el segundo, el intervalo no será creado. Solo los límites del intervalo y el carácter punto (.) serán escapados. Utilice la función ord() para encontrar el valor ASCII de un carácter.

Ejemplo #2 addcslashes() con caracteres en el orden incorrecto

<?php
echo addcslashes("zoo['.']", 'z..A');
// Muestra: \zoo['\.']
?>

Tenga cuidado con el uso de caracteres como 0, a, b, f, n, r, t y v. Serán convertidos en \0, \a, \b, \f, \n, \r, \t y \v, todos siendo secuencias de escape en C. La mayoría de estas secuencias también están definidas en otros lenguajes derivados de C, incluyendo PHP, lo que significa que no se obtendrá el resultado esperado si se utiliza la salida de la función addcslashes() para generar código para estos lenguajes con los caracteres definidos en el parámetro characters.

Valores devueltos

Devuelve el string escapado.

Ejemplos

characters puede escribirse "\0..\37", lo que identifica todos los caracteres ASCII cuyo código está entre 0 y 37.

Ejemplo #3 Ejemplo con addcslashes()

<?php
$not_escaped
= "PHP isThirty\nYears Old!\tYay to the Elephant!\n";
$escaped = addcslashes($not_escaped, "\0..\37!@\177..\377");
echo
$escaped;
?>

Ver también

add a note

User Contributed Notes 3 notes

up
11
phpcoder at cyberpimp dot pimpdomain dot com
20 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
4
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
23 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