addslashes()
La fonction addslashes() ajoute des antislashs devant certains caractères dans une string pour les intégrer en toute sécurité dans du code.
La fonction addslashes() ajoute un antislash (\) devant certains caractères dans une string afin qu'ils puissent être intégrés en toute sécurité dans du code ou des données. Elle échappe quatre caractères : le guillemet simple ('), le guillemet double ("), l'antislash (\) lui-même et l'octet NUL (\0). Cela est utile lorsque vous devez placer une string à l'intérieur d'une autre string délimitée par des guillemets, sans que les guillemets internes ne cassent la syntaxe environnante.
Syntaxe
addslashes(string $string): stringElle prend un seul paramètre — la string à échapper — et renvoie une nouvelle string avec les antislashs ajoutés. La string d'origine reste inchangée.
| Paramètre | Description |
|---|---|
$string | Obligatoire. La string à échapper. |
Exemple de base
La string ci-dessous contient à la fois des guillemets simples et des guillemets doubles. En la passant à addslashes(), on obtient une copie avec chaque guillemet échappé :
Le résultat est :
This is a string with \'quotes\' and \"double quotes\".Chaque ' et " est maintenant précédé d'un antislash, ce qui permet d'insérer la string dans un contexte délimité par des guillemets sans terminer prématurément la string environnante.
Inverser le résultat avec stripslashes()
addslashes() est l'inverse de stripslashes(). Ce que la première ajoute, la seconde le supprime, vous permettant ainsi d'effectuer un aller-retour sur une valeur sans perte de données :
<?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)
?>Seuls les antislashs insérés par addslashes() elle-même sont supprimés, de sorte que la string restaurée correspond exactement à l'originale.
Quand l'utiliser
Utilisez addslashes() lorsque vous devez intégrer du texte à l'intérieur d'une autre string délimitée par des guillemets — par exemple, pour construire un littéral de string destiné à un fichier d'export, un extrait de configuration, ou une sortie qui sera ensuite analysée par eval() (que vous devriez généralement éviter). C'est un outil de formatage, pas une fonction d'échappement liée à une destination particulière.
addslashes() n'est pas une fonction de sécurité
C'est le point le plus important à comprendre. addslashes() ne rend pas une string sûre pour les requêtes SQL ou la sortie HTML, et l'utiliser de cette manière rend votre application vulnérable :
- Pour les requêtes de base de données, utilisez des prepared statements avec PDO ou
mysqli, oumysqli_real_escape_string()pour l'approche d'échappement classique. Contrairement àaddslashes(),mysqli_real_escape_string()prend en compte la connexion et le jeu de caractères. - Pour la sortie HTML, utilisez
htmlspecialchars()pour neutraliser<,>,&et les guillemets.
addslashes() n'est pas non plus compatible avec le multi-octet : elle opère octet par octet et peut corrompre ou mal échapper des strings dans des encodages tels que Shift-JIS ou GBK, ce qui explique précisément pourquoi elle ne doit pas être utilisée pour la sécurité SQL.
Fonctions associées
stripslashes()— supprime les antislashs ajoutés paraddslashes().addcslashes()— vous permet de choisir exactement quels caractères échapper.quotemeta()— échappe les métacaractères des expressions régulières.htmlspecialchars()— échappe les caractères ayant une signification particulière en HTML.