W3docs

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): string

Acepta 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ámetroDescripción
$stringRequerido. 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:

php— editable, runs on the server

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, o mysqli_real_escape_string() como enfoque de escape heredado. A diferencia de addslashes(), 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 por addslashes().
  • addcslashes() — permite elegir exactamente qué caracteres escapar.
  • quotemeta() — escapa los metacaracteres de expresiones regulares.
  • htmlspecialchars() — escapa los caracteres con significado especial en HTML.

Práctica

Práctica
¿Cuál es la función de addslashes() en PHP?
¿Cuál es la función de addslashes() en PHP?
Was this page helpful?