In HTML, i caratteri <, > e & hanno un significato speciale e vanno sempre escapati, ma l'italiano ha le sue insidie tipografiche: l'accento su parole tronche come "perché" può essere grave o acuto a seconda del suono, e sbagliarlo cambia il significato della parola.
Accento grave contro accento acuto: non è un dettaglio
In "città" o "però" l'accento è grave (è, è), mentre in "perché" o "né" è acuto (é, é) — la differenza segue il suono aperto o chiuso della vocale, non è intercambiabile come spesso si crede. Un errore di battitura comune è scrivere "perchè" con l'accento grave: il browser lo visualizza comunque, l'entity è è valida, ma il risultato è ortograficamente sbagliato in italiano.
L'apostrofo elisivo nelle contrazioni
Parole come "l'albero" o "dell'anno" usano l'apostrofo per l'elisione, tipograficamente reso con l'apostrofo curvo ’ (’) nei testi curati, anziché l'apostrofo dritto ' ereditato dalle macchine da scrivere. La differenza è invisibile a un lettore distratto ma può creare doppioni indesiderati quando si confrontano stringhe o si indicizza il testo per la ricerca interna del sito.
Entity con nome e numeriche
Un'entity HTML può essere scritta in due modi: con un codice con nome (<, &, ") o numerico (<, &, o in esadecimale <). Il browser le mostra allo stesso modo in entrambi i casi.
L'insieme minimo di caratteri da escapare
<→<— perché non inizi un tag.>→>— per chiudere correttamente il testo dopo un tag.&→&— perché la & non venga letta come inizio di un'altra entity."e'→",'— obbligatorio dentro attributi tra virgolette.
Il legame con le vulnerabilità XSS
La maggior parte delle vulnerabilità XSS nasce proprio perché testo inserito dall'utente viene messo in HTML senza escaping. Se si mostra "<script>...</script>" senza convertirlo in entity, il browser lo eseguirà come codice. L'escaping è una misura di protezione di base — ma non l'unica.
Il contesto conta: testo contro attributo
Fare l'escape di <, > e & è sufficiente per il testo tra i tag, ma dentro un attributo tra virgolette occorre anche escapare esattamente il tipo di virgoletta usato — doppia o singola. Se l'attributo è delimitato da virgolette doppie e il valore contiene una virgoletta doppia non escapata, il markup si "romperà" prima del previsto.