Utilia

Échapper et déséchapper une chaîne

Échappez ou déséchappez une chaîne pour JSON, JavaScript, les littéraux de gabarit, SQL, CSV, les attributs HTML, les regex et les URL, dans le navigateur.

Comment échapper ou déséchapper une chaîne

  1. Choisissez la cible dans Format : chaîne JSON, chaîne JavaScript, littéral de gabarit JavaScript, chaîne SQL, champ CSV, valeur d’attribut HTML, expression régulière ou composant d’URL.
  2. Saisissez ou collez votre texte dans la zone d’entrée.
  3. Cliquez sur Échapper pour transformer un texte brut en littéral sûr, ou sur Déséchapper pour retrouver le texte d’origine. Le résultat se met à jour pendant la saisie, dans le dernier sens choisi.
  4. Réglez les options proposées pour le format : Ajouter les guillemets, Échapper les caractères non ASCII ou Espaces en + (formulaire).
  5. Cliquez sur Copier, ou sur Réutiliser le résultat pour inverser l’opération et vérifier l’aller-retour.

Le nombre de caractères avant et après s’affiche sous les boutons. Tout se passe dans votre navigateur : rien n’est envoyé.

Ce que fait chaque format

  • Chaîne JSON : échappe ", \ et les caractères de contrôle (\n, \t, \u0000…), exactement comme JSON.stringify. Avec Échapper les caractères non ASCII, tout caractère au-delà de U+007E devient \uXXXX (un emoji donne une paire de substitution comme \ud83d\ude00). Le déséchappement accepte le texte avec ou sans ses guillemets et tolère les retours à la ligne bruts.
  • Chaîne JavaScript (‘…’) : échappe la barre oblique inverse, l’apostrophe, les retours à la ligne et les caractères de contrôle, ainsi que U+2028 et U+2029, qui cassent les anciens moteurs. Le déséchappement comprend \x41, \u0041, \u{1F600}, les anciennes séquences octales comme \101 et les continuations de ligne.
  • Littéral de gabarit JavaScript (`…`) : échappe les accents graves, les barres obliques inverses et ${ pour qu’aucune expression ne soit évaluée ; les retours à la ligne et tabulations restent tels quels, puisque les gabarits les acceptent.
  • Chaîne SQL (‘…’) : double les apostrophes (O'Brien → 'O''Brien'), comme le prévoit la norme SQL. Le déséchappement refuse une apostrophe non doublée. Les barres obliques inverses ne sont pas modifiées : MySQL, dans son mode par défaut, les traite aussi comme caractère d’échappement ; vérifiez les règles de votre base.
  • Champ CSV (RFC 4180) : entoure le champ de guillemets et double les guillemets internes s’il contient une virgule, un point-virgule, une tabulation, un guillemet, un saut de ligne ou une espace en début ou en fin. Ajouter les guillemets force leur ajout.
  • Valeur d’attribut HTML : remplace &, <, >, " et ' par des entités, ce qui convient aux attributs entre guillemets simples comme doubles. Le déséchappement décode les références numériques ainsi que &amp;, &lt;, &gt;, &quot;, &apos; et &nbsp;.
  • Expression régulière (texte littéral) : préfixe d’une barre oblique inverse . * + ? ^ $ { } ( ) | [ ] \ /, ainsi que les sauts de ligne et tabulations, pour que le motif corresponde au texte tel quel. Le résultat fonctionne avec ou sans l’option u.
  • Composant d’URL (encodage %) : fonctionne comme encodeURIComponent et encode en octets UTF-8 tout sauf les lettres, les chiffres et - _ . ! ~ * ' ( ). Espaces en + (formulaire) applique la convention application/x-www-form-urlencoded.

Échapper n’est pas une protection contre l’injection SQL

Quand vous choisissez SQL, l’outil affiche un rappel qui mérite d’être répété : la vraie parade contre l’injection SQL, ce sont les requêtes paramétrées (requêtes préparées), où la valeur est transmise séparément du texte SQL. L’échappement manuel est fragile : il dépend de la base, du jeu de caractères de la connexion et de réglages comme la gestion des barres obliques inverses dans MySQL. Servez-vous de ce résultat pour lire des journaux, écrire des jeux de données de test ou déboguer une requête, jamais pour construire une requête à partir d’une saisie utilisateur.

Pour le CSV, l’outil signale aussi une valeur qui commence par =, +, - ou @ : un tableur risque de l’exécuter comme une formule (injection CSV). Les guillemets n’y changent rien ; la parade habituelle consiste à préfixer la valeur d’une apostrophe ou d’une espace.

Questions fréquentes

Quelle différence entre une chaîne JSON et une chaîne JavaScript ?

Le JSON n’accepte que les guillemets doubles et quelques séquences (\" \\ \/ \b \f \n \r \t \uXXXX). JavaScript accepte en plus les apostrophes, les accents graves, \x41, \u{…}, \v et \0. Un échappement JSON valide est donc valide en JavaScript, mais pas l’inverse.

Pourquoi le déséchappement affiche-t-il « séquence d’échappement invalide » ?

Le texte contient une barre oblique inverse suivie d’un élément interdit par le format, par exemple \u12 avec moins de quatre chiffres hexadécimaux, ou une barre oblique inverse isolée en fin de texte. Le message indique la séquence fautive.

Faut-il des guillemets autour de chaque champ CSV ?

Non. La RFC 4180 ne les exige que si le champ contient une virgule, un guillemet ou un saut de ligne. Cet outil met aussi entre guillemets les points-virgules, les tabulations et les espaces en début ou en fin, car beaucoup de tableurs (Excel en français notamment) utilisent le point-virgule comme séparateur ou suppriment ces espaces.

L’échappement d’attribut HTML suffit-il contre le XSS ?

Il est correct pour du texte placé dans une valeur d’attribut entre guillemets. Il ne suffit pas pour les attributs qui sont eux-mêmes du code ou des URL, comme onclick ou href="javascript:…" : ceux-là demandent une validation, pas seulement un échappement.

Mon texte est-il envoyé sur un serveur ?

Non. Toutes les conversions s’effectuent localement dans votre navigateur ; vous pouvez donc y coller des valeurs de configuration ou des données confidentielles.