stripcslashes()
O stripcslashes() do PHP remove o escape de strings com sequências no estilo C, convertendo \n, \t, \xHH e códigos octais. É o inverso exato de addcslashes().
Introdução
A função stripcslashes() do PHP remove o escape de uma string que contém sequências de escape no estilo C. Ela interpreta sequências como \n (nova linha), \t (tabulação), \r (retorno de carro), \xHH (hexadecimal) e \NNN (octal), convertendo cada uma delas no caractere real que representa. Quando há uma barra invertida antes de um caractere comum (que não faz parte de uma sequência reconhecida), a barra invertida é simplesmente descartada.
Ela é o inverso exato de addcslashes(): tudo o que addcslashes() escapa, stripcslashes() restaura. Essa é a principal diferença em relação a stripslashes(), que apenas remove as barras invertidas adicionadas por addslashes() e não interpreta sequências de escape.
Esta página aborda a sintaxe, como cada tipo de sequência de escape é decodificado, uma operação de ida e volta com addcslashes() e a pegadinha mais comum envolvendo strings com aspas duplas no PHP.
Sintaxe
stripcslashes(string $string): string| Parâmetro | Descrição |
|---|---|
$string | A string da qual remover o escape. Pode conter sequências de escape no estilo C e/ou barras invertidas literais. |
Valor de retorno: uma nova string com as sequências de escape decodificadas. A string original não é modificada.
Exemplo básico
No PHP, o literal entre aspas duplas "Hello\\ World\\!" já reduz cada \\ a uma única barra invertida, de modo que o valor passado para a função é Hello\ World\!. O espaço e o ! não fazem parte de nenhuma sequência de escape, então stripcslashes() remove as barras invertidas que vêm antes deles. A saída é:
Hello World!Decodificação de sequências de escape
Ao contrário de stripslashes(), stripcslashes() converte ativamente as sequências reconhecidas em caracteres de controle reais. Este exemplo usa strings de origem com aspas simples para que as barras invertidas cheguem intactas à função:
<?php
echo stripcslashes('Line1\nLine2'), "\n"; // \n becomes a real newline
echo stripcslashes('Column1\tColumn2'), "\n"; // \t becomes a real tab
echo stripcslashes('\x41\x42\x43'), "\n"; // hex codes -> ABC
echo stripcslashes('\101\102\103'), "\n"; // octal codes -> ABCSaída:
Line1
Line2
Column1 Column2
ABC
ABCTanto \x41 (hexadecimal) quanto \101 (octal) correspondem ao código de caractere 65, que é a letra A.
Ida e volta com addcslashes()
Como stripcslashes() reverte addcslashes(), escapar uma string e depois remover o escape devolve exatamente o valor original:
<?php
$original = "Price: \$5\nNew line";
// Escape the dollar sign and the newline.
$escaped = addcslashes($original, "\$\n");
echo $escaped, "\n"; // Price: \$5\nNew line
$restored = stripcslashes($escaped);
var_dump($original === $restored); // bool(true)Saída:
Price: \$5\nNew line
bool(true)Aspas simples vs. aspas duplas
A confusão mais comum com stripcslashes() é quem processa as barras invertidas. O próprio PHP interpreta as sequências de escape dentro de strings com aspas duplas antes mesmo de stripcslashes() ser executada, portanto uma sequência pode já ter sido decodificada:
<?php
// Double quotes: PHP turns "\n" into a newline first,
// so stripcslashes() never sees the backslash.
echo strlen("\n"); // 1
// Single quotes: the two characters \ and n are passed
// literally, and stripcslashes() does the decoding.
echo strlen(stripcslashes('\n')); // 1Saída:
11Quando as sequências de escape vêm de uma fonte externa (um arquivo, um banco de dados, uma entrada do usuário), elas chegam como os caracteres literais \ + n, e é por isso que stripcslashes() é a ferramenta certa para decodificá-las.
Quando usar
- Reverter a saída de
addcslashes(). - Decodificar sequências de escape no estilo C armazenadas como texto literal (valores de configuração, linhas de log, dados exportados de programas em C).
- Restaurar caracteres de controle, como tabulações e quebras de linha, que foram escapados para armazenamento ou transporte seguro.
Para remover barras invertidas simples, sem interpretar sequências de escape, use stripslashes().
Conclusão
stripcslashes() remove o escape de strings que contêm sequências de escape no estilo C, decodificando \n, \t, códigos hexadecimais (\xHH) e octais (\NNN) nos caracteres reais e descartando barras invertidas soltas. Ela é o inverso preciso de addcslashes(), o que a torna confiável para operações de escape de ida e volta. Tenha em mente a diferença em relação a stripslashes() e lembre-se de que as próprias strings com aspas duplas do PHP podem decodificar sequências antes que a função seja executada.