addslashes()
A função addslashes() adiciona barras invertidas antes de caracteres específicos numa string, útil para incorporar texto em contextos com aspas.
A função addslashes() adiciona uma barra invertida (\) antes de determinados caracteres numa string para que possam ser incorporados com segurança em código ou dados. Ela escapa quatro caracteres: a aspa simples ('), a aspa dupla ("), a própria barra invertida (\) e o byte NUL (\0). Isso é útil quando você precisa colocar uma string dentro de outra string entre aspas sem que as aspas internas quebrem a sintaxe ao redor.
Sintaxe
addslashes(string $string): stringAceita um único parâmetro — a string a ser escapada — e retorna uma nova string com as barras invertidas adicionadas. A string original permanece inalterada.
| Parâmetro | Descrição |
|---|---|
$string | Obrigatório. A string a ser escapada. |
Exemplo básico
A string abaixo contém tanto aspas simples quanto aspas duplas. Ao passá-la para addslashes(), é retornada uma cópia com cada aspa escapada:
A saída é:
This is a string with \'quotes\' and \"double quotes\".Cada ' e " agora tem uma barra invertida na frente, de modo que a string pode ser inserida em um contexto entre aspas sem encerrar prematuramente a string ao redor.
Revertendo o resultado com stripslashes()
addslashes() é o inverso de stripslashes(). O que a primeira adiciona, a segunda remove, permitindo que um valor faça o ciclo completo sem perda de dados:
<?php
$original = "O'Reilly's book costs \$5.";
$escaped = addslashes($original);
$restored = stripslashes($escaped);
echo $escaped . "\n"; // O\'Reilly\'s book costs $5.
echo $restored . "\n"; // O'Reilly's book costs $5.
var_dump($original === $restored); // bool(true)
?>Apenas as barras invertidas inseridas pelo próprio addslashes() são removidas, portanto a string restaurada corresponde exatamente à original.
Quando usar
Use addslashes() quando precisar incorporar texto dentro de outra string entre aspas — por exemplo, ao construir um literal de string para um arquivo de exportação, um trecho de configuração ou uma saída que será posteriormente analisada por eval() (o que geralmente deve ser evitado). É um auxiliar de formatação, não uma função de escape vinculada a um destino específico.
addslashes() não é uma função de segurança
Este é o ponto mais importante a entender. addslashes() não torna uma string segura para consultas SQL ou saída HTML, e usá-la dessa forma deixa sua aplicação vulnerável:
- Para consultas de banco de dados, use prepared statements com PDO ou
mysqli, oumysqli_real_escape_string()para a abordagem de escape legada. Ao contrário deaddslashes(),mysqli_real_escape_string()considera a conexão e o conjunto de caracteres. - Para saída HTML, use
htmlspecialchars()para neutralizar<,>,&e aspas.
addslashes() também não suporta múltiplos bytes: opera byte a byte e pode corromper ou escapar incorretamente strings em encodings como Shift-JIS ou GBK, o que é exatamente o motivo pelo qual não deve ser utilizada para segurança SQL.
Funções relacionadas
stripslashes()— remove as barras invertidas adicionadas poraddslashes().addcslashes()— permite escolher exatamente quais caracteres escapar.quotemeta()— escapa metacaracteres de expressões regulares.htmlspecialchars()— escapa caracteres com significado especial em HTML.