Utilia

Escape/unescape di stringhe

Esegui l'escape o l'unescape di una stringa per JSON, JavaScript, template literal, SQL, CSV, attributi HTML, regex e URL, direttamente nel browser.

Come fare l’escape o l’unescape di una stringa

  1. Scegli il formato di destinazione in Formato: stringa JSON, stringa JavaScript, template literal JavaScript, stringa letterale SQL, campo CSV, valore di attributo HTML, espressione regolare o componente URL.
  2. Scrivi o incolla il testo nella casella di input.
  3. Premi Escape per trasformare il testo semplice in un letterale sicuro, oppure Unescape per riportare un letterale a testo semplice. Il risultato si aggiorna mentre scrivi, nella direzione che hai scelto per ultima.
  4. Regola le opzioni mostrate per il formato: Aggiungi virgolette di apertura e chiusura, Escape dei caratteri non ASCII o Spazi come + (dati di form).
  5. Premi Copia, oppure Usa il risultato come input per invertire l’operazione e verificare il percorso di andata e ritorno.

Il numero di caratteri prima e dopo compare sotto i pulsanti. Tutto avviene nel tuo browser; non viene caricato nulla.

Cosa fa ogni formato

  • Stringa JSON: esegue l’escape di ", \ e dei caratteri di controllo (\n, \t, \u0000…), esattamente come JSON.stringify. Con Escape dei caratteri non ASCII, ogni carattere oltre U+007E diventa \uXXXX (le lettere accentate come è diventano è, le emoji una coppia di surrogati come 😀). L’unescape accetta il testo con o senza le virgolette doppie e tollera gli a capo grezzi.
  • Stringa JavaScript (‘…’): esegue l’escape del backslash, dell’apice singolo, degli a capo e dei caratteri di controllo, oltre a U+2028 e U+2029, che mandano in crisi i motori più vecchi. L’unescape comprende \x41, A, \u{1F600}, le vecchie sequenze ottali come \101 e le continuazioni di riga.
  • Template literal JavaScript (`…`): esegue l’escape di backtick, backslash e ${, così nessuna espressione viene valutata; a capo e tabulazioni restano invariati, perché i template literal li ammettono.
  • Stringa letterale SQL (‘…’): raddoppia gli apici singoli (L'Aquila → 'L''Aquila'), come nell’SQL standard. L’unescape rifiuta un apice non raddoppiato. I backslash non vengono toccati: MySQL, nella modalità predefinita, tratta anche \ come carattere di escape, quindi controlla le regole del tuo database.
  • Campo CSV (RFC 4180): racchiude il campo tra virgolette doppie e raddoppia le virgolette interne quando contiene una virgola, un punto e virgola, una tabulazione, una virgoletta, un a capo o uno spazio iniziale/finale. Aggiungi virgolette di apertura e chiusura forza le virgolette.
  • Valore di attributo HTML: sostituisce &, <, >, " e ' con entità, il che è sicuro sia negli attributi tra apici singoli sia in quelli tra virgolette doppie. L’unescape decodifica i riferimenti numerici e &amp;, &lt;, &gt;, &quot;, &apos; e &nbsp;.
  • Espressione regolare (testo letterale): aggiunge un backslash davanti a . * + ? ^ $ { } ( ) | [ ] \ /, oltre ad a capo e tabulazioni, così il pattern riconosce il testo alla lettera. Il risultato è valido con o senza il flag u.
  • Componente URL (percent-encoding): funziona come encodeURIComponent e codifica come byte UTF-8 tutto tranne lettere, cifre e - _ . ! ~ * ' ( ). Spazi come + (dati di form) usa la convenzione application/x-www-form-urlencoded.

Per SQL l’escape non è una barriera di sicurezza

Quando scegli SQL, lo strumento mostra un promemoria che vale la pena ripetere: la vera soluzione contro la SQL injection è una query parametrizzata (prepared statement), in cui il valore viene inviato separatamente dal testo SQL. L’escape manuale è fragile: dipende dal database, dal set di caratteri della connessione e da impostazioni come la gestione dei backslash di MySQL. Usa questo risultato per leggere log, scrivere fixture o fare il debug di una query, mai per costruire query a partire dall’input degli utenti.

Per il CSV, lo strumento avvisa anche quando un valore inizia con =, +, - o @: un foglio di calcolo potrebbe eseguirlo come formula (CSV injection). Le virgolette non lo impediscono; anteporre al valore un apostrofo o uno spazio è la contromisura abituale.

Domande frequenti

Che differenza c'è tra una stringa JSON e una stringa JavaScript?

JSON ammette solo le virgolette doppie e un piccolo insieme di escape (\" \\ \/ \b \f \n \r \t \uXXXX). JavaScript accetta anche apici singoli, backtick, \x41, \u{…}, \v e \0. Gli escape JSON validi sono JavaScript valido, ma non il contrario.

Perché l'unescape fallisce con "sequenza di escape non valida"?

Il testo contiene un backslash seguito da qualcosa che il formato non ammette, come \u12 con meno di quattro cifre esadecimali, oppure un backslash isolato alla fine. Il messaggio di errore mostra la sequenza difettosa.

Nel CSV servono le virgolette intorno a ogni campo?

No. La RFC 4180 richiede le virgolette solo quando il campo contiene una virgola, una virgoletta doppia o un a capo. Questo strumento mette tra virgolette anche punti e virgola, tabulazioni e spazi iniziali o finali, perché molti fogli di calcolo (Excel in italiano compreso) usano il punto e virgola come separatore o eliminano gli spazi.

L'escape per attributi HTML basta a prevenire l'XSS?

È corretto per il testo inserito in un valore di attributo tra virgolette. Non basta per gli attributi che sono a loro volta codice o URL, come onclick o href="javascript:…": lì serve una validazione, non solo l’escape.

Il mio testo viene inviato a un server?

No. Tutte le conversioni avvengono in locale nel tuo browser, quindi puoi incollare senza timori valori di configurazione o dati che non condivideresti.