addslashes()
La función addslashes() añade barras invertidas antes de ciertos caracteres en un string para incluirlos de forma segura en código o datos.
La función addslashes() añade una barra invertida (\) delante de ciertos caracteres en un string para que puedan incrustarse de forma segura en código o datos. Escapa cuatro caracteres: la comilla simple ('), la comilla doble ("), la propia barra invertida (\) y el byte NUL (\0). Esto resulta útil cuando necesitas colocar un string dentro de otro string entre comillas sin que las comillas internas rompan la sintaxis que las rodea.
Sintaxis
addslashes(string $string): stringAcepta un único parámetro —el string a escapar— y devuelve un nuevo string con las barras invertidas añadidas. El string original no se modifica.
| Parámetro | Descripción |
|---|---|
$string | Requerido. El string que se va a escapar. |
Ejemplo básico
El string siguiente contiene tanto comillas simples como dobles. Al pasarlo a addslashes() se obtiene una copia con cada comilla escapada:
La salida es:
This is a string with \'quotes\' and \"double quotes\".Cada ' y " tiene ahora una barra invertida delante, por lo que el string puede insertarse en un contexto entre comillas sin que termine prematuramente el string circundante.
Revertir el resultado con stripslashes()
addslashes() es la función inversa de stripslashes(). Lo que la primera añade, la segunda lo elimina, por lo que se puede hacer un viaje de ida y vuelta con un valor sin perder datos:
<?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)
?>Solo se eliminan las barras invertidas que addslashes() insertó, por lo que el string restaurado coincide exactamente con el original.
Cuándo usarla
Recurre a addslashes() cuando necesites incrustar texto dentro de otro string entre comillas — por ejemplo, para construir un literal de string en un archivo de exportación, un fragmento de configuración, o una salida que luego será analizada por eval() (lo cual en general deberías evitar). Es una función de formato, no una función de escape ligada a un destino específico.
addslashes() no es una función de seguridad
Este es el punto más importante que hay que entender. addslashes() no hace que un string sea seguro para consultas SQL ni para la salida HTML, y utilizarla de ese modo deja tu aplicación vulnerable:
- Para consultas a bases de datos, usa sentencias preparadas con PDO o
mysqli, omysqli_real_escape_string()como enfoque de escape heredado. A diferencia deaddslashes(),mysqli_real_escape_string()tiene en cuenta la conexión y el juego de caracteres. - Para la salida HTML, usa
htmlspecialchars()para neutralizar<,>,&y las comillas.
addslashes() tampoco es compatible con múltiples bytes: opera byte a byte y puede corromper o escapar incorrectamente strings en codificaciones como Shift-JIS o GBK, que es precisamente la razón por la que no debe utilizarse como garantía de seguridad en SQL.
Funciones relacionadas
stripslashes()— elimina las barras invertidas añadidas poraddslashes().addcslashes()— permite elegir exactamente qué caracteres escapar.quotemeta()— escapa los metacaracteres de expresiones regulares.htmlspecialchars()— escapa los caracteres con significado especial en HTML.