addcslashes

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

addcslashesEscata string com barras invertidas no estilo C

Descrição

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

Retorna uma string com barras invertidas antes dos caracteres que estão listados no parâmetro characters.

Parâmetros

string

A string a ser escapada.

characters

Uma lista de caracteres a serem escapados. Se characters contiver caracteres \n, \r etc., eles serão convertidos no estilo da linguagem C, enquanto que outros caracteres não alfanuméricos com códigos ASCII menores que 32 e maiores que 126 serão convertidos para a representação octal.

Ao definir uma sequência de caracteres no argumento characters certifique-se que são conhecidos todos os caracteres que aparecem entre aqueles definidos como o início e o final do intervalo.

<?php
echo addcslashes('foo[ ]', 'A..z');
// saída: \f\o\o\[ \]
// Todas as letras maiúsculas e minúsculas serão escapadas
// ... mas também os caracteres [\]^_`
?>
Adicionamente, se o primeiro caractere em uma sequência possuir um código ASCII maior que o segundo caractere na sequência, na verdade nenhum intervalo será construído. Apenas os caracteres do início, do final e o caractere "." serão escapados. Use a função ord() para encontrar o código ASCII de um caractere.
<?php
echo addcslashes("zoo['.']", 'z..A');
// output: \zoo['\.']
?>

Cuidado ao escapar os caracteres 0, a, b, f, n, r, t e v. Eles serão convertidos para \0, \a, \b, \f, \n, \r, \t e \v, que são sequências de escape pré-definidas em C. Muitas dessas sequências são também definidas em outras linguagens derivadas do C, incluindo o PHP, o que significa que pode não ser obtido o resultado desejado se a saída de addcslashes() for usada para gerar código nessas linguagens com estes caracteres definidos no parâmetro characters.

Valor Retornado

Retorna a string escapada.

Exemplos

Parâmetro characters definido para algo como "\0..\37", que escapa todos os caracteres com código entre 0 e 31 (octal \37).

Exemplo #1 Exemplo de addcslashes()

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

Veja Também

add a note

User Contributed Notes 6 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
4
stein at visibone dot com
16 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.
up
-1
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
-6
Johannes
16 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