bitlvl
IT

Strumento di escape per stringhe

Scrivi una stringa una volta e leggila con l’escape per ogni contesto allo stesso tempo, oppure scegli un formato e incolla qualcosa da cui togliere l’escape.

 

I risultati e i messaggi di questo strumento sono mostrati in inglese.

L’escape dipende dal contesto

Una stringa non è mai «con escape» in astratto; ha l’escape per un posto specifico in cui sta per essere inserita, e ogni posto ha le proprie regole. Lo stesso testo richiede \" in JSON, '' in SQL, '\'' in una shell e " in HTML. Usare quello sbagliato è il modo in cui nascono i bug di iniezione: fare l’escape HTML prima di mettere il testo in una stringa JavaScript, o fare l’escape per la shell con i doppi apici lasciando attivo $.

ContestoCosa richiede l’escapeCome
Stringa JSON" \ e caratteri di controllo\" \\ \n \t \u00XX
Shell, apici singoli''\'' (chiudi, apice letterale, riapri)
Shell, doppi apici" \ $ ` e ! in bash interattivabackslash
Letterale SQL''' (MySQL accetta anche \')
Regex. * + ? ^ $ { } ( ) [ ] | \ /backslash
C / Go / Rust / Java" \ a capo tab\" \\ \n \t \xHH \uHHHH
Campo CSV, " a caporacchiudi tra virgolette, raddoppia le virgolette
Testo HTML / XML& < > " '&amp; &lt; &gt; &quot; &#39; / &apos;
YAMLTutto ciò che è ambiguo: yes, no, 1.0, * o & iniziali, due puntiDoppi apici con escape JSON

La shell, nello specifico

Gli apici singoli sono l’unico quoting completamente sicuro nelle shell POSIX: nulla al loro interno viene interpretato, e l’unico carattere che non può comparire è l’apice singolo stesso, che si scrive chiudendo la stringa, aggiungendo un apice con escape e ricominciando: 'it'\''s'. I doppi apici espandono ancora $variabili, `comandi` e \, quindi servono quando vuoi l’espansione. Quando passi dati da codice, non costruire affatto righe di comando: usa un array di argomenti (execve, subprocess.run([...]), exec.Command), e l’escape diventa superfluo.

SQL, nello specifico

Raddoppiare gli apici è SQL corretto, ma non è il modo in cui le applicazioni dovrebbero passare i valori. Le query parametrizzate ($1, ?, :name) inviano il valore separatamente dall’istruzione e rendono impossibile l’iniezione. Usa l’escape SQL per query estemporanee in una console, non nel codice.

Domande

Come metto un apice singolo dentro una stringa shell tra apici singoli?

Chiudi la stringa, aggiungi un apice con escape, ricomincia: 'it'\''s'. Oppure usa $'it\'s' in bash/zsh, che supporta gli escape con backslash.

Perché il mio JSON ha \u00e9 invece di é?

Alcuni codificatori fanno l’escape di tutto il non-ASCII per sicurezza nei canali a 7 bit. È comunque valido e decodifica nella stessa stringa. JSON.stringify in JavaScript e json.dumps con ensure_ascii=False in Python mantengono i caratteri.

Che differenza c’è tra escape e codifica?

L’escape protegge pochi caratteri speciali perché il testo possa stare dentro una sintassi; la codifica (Base64, URL) trasforma l’intera stringa in un alfabeto diverso. Base64 e la codifica URL sono incluse qui perché spesso servono nello stesso momento.

Posso fare l’escape per una regex in un linguaggio specifico?

L’escape per regex copre i metacaratteri condivisi da tutti i motori comuni (PCRE, JavaScript, Python, Go RE2, Java). Dentro una classe di caratteri [] contano solo ] \ ^ e -; lo strumento fa l’escape in modo conservativo perché il risultato funzioni ovunque.