W HTML znaki <, > i & mają specjalne znaczenie i trzeba je escapować, ale polski alfabet dokłada do tego dziewięć własnych liter diakrytycznych oraz odrębną konwencję cudzysłowów, o której większość ogólnych poradników w ogóle nie wspomina.
Dziewięć polskich znaków diakrytycznych
Litery ą, ć, ę, ł, ń, ó, ś, ź i ż nie mają odpowiedników w podstawowym ASCII. Przy UTF-8 nie trzeba ich już zamieniać na encje, żeby się poprawnie wyświetliły, ale wciąż pojawiają się w postaci encji numerycznych w starszych eksportach CSV, plikach z czasów kodowania ISO-8859-2 (Latin-2) czy w nagłówkach e-maili generowanych przez starsze systemy transakcyjne.
Polskie cudzysłowy „dolne-górne", jak w niemieckim
Polska typografia otwiera cudzysłów znakiem dolnym „, a zamyka górnym ” — „tak jak tutaj" — a nie prostymi cudzysłowami " w stylu angielskim. Motyw wizualny (szablon bloga, CMS) przeniesiony bez zmian z anglojęzycznego oryginału bardzo często pokazuje niewłaściwy typ cudzysłowu, bo znaki są zaszyte na sztywno w kodzie szablonu.
Minimalny zestaw znaków do escapowania
<→<— żeby nie zaczynał się tag.>→>— żeby poprawnie zamknąć tekst po tagu.&→&— żeby & nie był odczytany jako początek innej encji."i'→",'— wymagane wewnątrz atrybutów w cudzysłowach.
Związek z XSS
Większość podatności XSS powstaje właśnie dlatego, że tekst wprowadzony przez użytkownika jest wstawiany do HTML bez escapowania. Wyświetlenie „<script>...</script>" bez zamiany na encje sprawi, że przeglądarka wykona go jako kod. Escapowanie to podstawowa — choć nie jedyna — ochrona przy wyświetlaniu dynamicznej treści.
Kontekst ma znaczenie: tekst kontra atrybut
Escapowanie <, > i & wystarcza dla tekstu między znacznikami, ale wewnątrz atrybutu w cudzysłowie trzeba dodatkowo escapować dokładnie ten znak cudzysłowu, który został użyty — podwójny lub pojedynczy. Jeśli atrybut jest ograniczony cudzysłowem podwójnym, a w wartości znajduje się nieescapowany cudzysłów podwójny, znacznik „urwie się" wcześniej niż oczekiwano.