Le français utilise des accents et des guillemets typographiques « » qui ne sont pas des caractères ASCII. Dans un contexte HTML, ces caractères se traitent différemment de l'échappement JS/JSON : « café à emporter » devient « café à emporter » avec des entités nommées, alors que dans une chaîne JS ou JSON, ces mêmes caractères restent généralement tels quels (ou passent en é si l'échappement Unicode est activé) — deux logiques d'échappement bien distinctes pour le même texte source.
Échappement dans une chaîne JavaScript/JSON
Dans les littéraux de chaîne JS et en JSON, les caractères spéciaux sont échappés avec une barre oblique inversée : \" pour un guillemet droit, \n pour un retour à la ligne, \\ pour la barre oblique inversée elle-même. JSON exige en plus que toutes les chaînes utilisent des guillemets doubles — contrairement à JS, où les guillemets simples sont aussi acceptés.
Échappement dans les commandes shell
En ligne de commande, les caractères spéciaux incluent l'espace, les guillemets, le signe dollar, l'astérisque et d'autres — ils ont une signification particulière pour le shell. Un espace dans un argument de commande doit être échappé, ou l'argument entier placé entre guillemets, sinon le shell le découpe en deux arguments distincts.
Échappement dans les expressions régulières
Dans les expressions régulières, des caractères comme le point, l'astérisque ou les parenthèses ont une signification spéciale (n'importe quel caractère, un quantificateur, un groupe). Pour les faire correspondre littéralement plutôt que comme métacaractères, on place une barre oblique inversée devant : \. trouve un point littéral, pas « n'importe quel caractère ».
Pourquoi chaque contexte a besoin de son propre échappement
Les erreurs de « double échappement » ou d'« échappement insuffisant » comptent parmi les causes les plus fréquentes de code cassé lors de l'insertion de texte utilisateur (par exemple un chemin de fichier contenant un espace) dans une commande ou une chaîne. L'échappement correct dépend de l'endroit exact où le texte est inséré, pas du texte lui-même.
À quoi ça sert
- Préparer du texte utilisateur en français, accents et guillemets compris, pour une insertion sûre dans une requête JSON ou une page HTML.
- Construire une commande shell avec un argument dynamique sans risque d'injection de commande.
- Échapper les caractères spéciaux avant d'utiliser le texte comme motif littéral dans une expression régulière.
Double échappement dans des contextes imbriqués
Quand un texte traverse deux contextes successifs — par exemple une chaîne insérée dans du JSON, ce JSON étant ensuite passé comme argument d'une commande shell — l'échappement doit être appliqué dans le bon ordre : d'abord pour le contexte interne (JSON), puis pour l'externe (shell). Inverser l'ordre ou sauter un niveau est une cause fréquente pour laquelle une chaîne « correctement échappée » reste cassée en pratique.