Converti caratteri speciali in entità HTML e viceversa.
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 &lt;: 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 < → < > → > " → " ' → ' tutto il resto: &#DECIMALE; oppure SADECIMALE;
Esempio pratico
La stringa <b>a & b</b> con escape corretto e poi con la e commerciale gestita per ultima.
- ordine corretto → <b>a & b</b>
- e commerciale per ultima → &lt;b&gt;a & b&lt;/b&gt;
- ogni entità dei passaggi precedenti ha subito un nuovo escape
- il browser mostra poi il testo letterale <b> 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.
- ' è definita in XML ma non lo era in HTML 4, ed è per questo che ' è 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 <b> 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.