Skip to main content

Converti caratteri speciali in entità HTML e viceversa.

Tutti i calcoli sono eseguiti localmente nel tuo browser. Nessun dato viene inviato al server.

I risultati hanno carattere informativo. Verificali con altre fonti.

Fai l'escape della e commerciale per ultima e corrompi ogni entità appena scritta

L'escape HTML ha cinque caratteri e una regola sull'ordine. La e commerciale deve venire per prima, perché ogni sostituzione successiva introduce nuove e commerciali. Falle l'escape per ultima e < diventa <: la pagina mostra il testo dell'entità anziché il carattere, e il bug sembra un template rovinato invece che un errore di sequenza.

Come funziona

  • Converte i caratteri che hanno significato in HTML nelle loro forme di entità, e viceversa.
  • Applica le sostituzioni nell'ordine che evita il doppio escape.
  • Copre le cinque entità predefinite più i riferimenti numerici per tutto il resto.
&  →  &      DEVE essere sostituita per prima
<  →  &lt;
>  →  &gt;
"  →  &quot;
'  →  &#39;

tutto il resto:  &#DECIMALE;  oppure  &#xESADECIMALE;

Esempio pratico

La stringa <b>a & b</b> con escape corretto e poi con la e commerciale gestita per ultima.

  1. ordine corretto → &lt;b&gt;a &amp; b&lt;/b&gt;
  2. e commerciale per ultima → &amp;lt;b&amp;gt;a &amp; b&amp;lt;/b&amp;gt;
  3. ogni entità dei passaggi precedenti ha subito un nuovo escape
  4. il browser mostra poi il testo letterale &lt;b&gt; nella pagina

Una sola riga riordinata trasforma un output funzionante in codici di entità visibili. Le cinque sostituzioni sono banali prese singolarmente; l'unica cosa che può andare storta è eseguirle nella sequenza sbagliata.

Come leggere il risultato

  • L'escape dipende dal contesto e qui se ne copre uno. Un valore sicuro nel testo di un elemento non è automaticamente sicuro in un attributo, in un URL, dentro un blocco di script o nel CSS: ogni destinazione richiede il proprio escape applicato nel punto d'uso.
  • &apos; è definita in XML ma non lo era in HTML 4, ed è per questo che &#39; è la forma numerica più sicura per l'apostrofo in output HTML che possa finire in parser datati.
  • I valori degli attributi richiedono in particolare l'escape delle virgolette. Una virgoletta doppia senza escape dentro un attributo racchiuso fra virgolette chiude l'attributo in anticipo, ed è il meccanismo dietro buona parte delle iniezioni tramite template.
  • Fare escape non è sanificare. Rende il markup inerte mostrandolo come testo; non decide se il contenuto fosse ammissibile in partenza, e un sistema che deve consentire un po' di HTML ha bisogno di un parser e di una lista di elementi permessi, non di un escaper.

Domande frequenti

Perché la mia pagina mostra &lt;b&gt; come testo?
Il contenuto ha subito due escape, di solito perché la regola della e commerciale è stata eseguita dopo le altre oppure perché un valore già sottoposto a escape a monte è stato rielaborato dal template. Individua lo strato che lo fa in eccesso invece di decodificare alla fine.
Devo fare l'escape di tutti e cinque i caratteri?
Nel testo di un elemento il minimo sono la e commerciale e le parentesi angolari. Dentro i valori degli attributi servono anche le virgolette, e poiché gli escaper raramente sanno quale contesto stanno alimentando, gestirli tutti e cinque è l'impostazione predefinita sicura.