Escapowanie HTML to proces zastępowania znaków mających specjalne znaczenie w HTML odpowiednimi odwołaniami do encji. Pięć znaków, które muszą być escapowane, to: ampersand (&), mniejszy niż (<), większy niż (>), cudzysłów (") oraz apostrof ('). Bez escapowania przeglądarka interpretuje te znaki jako instrukcje znaczników, a nie tekst do wyświetlenia — co powoduje błędy renderowania i otwiera drzwi do ataków wstrzykiwania kodu.
Specyfikacja HTML (utrzymywana przez WHATWG) definiuje dwie formy odwołań do znaków: nazwane encje, takie jak &, oraz numeryczne encje, takie jak & lub &. Nazwane encje są łatwiejsze do odczytania w kodzie źródłowym. Encje numeryczne (dziesiętne lub szesnastkowe) mogą reprezentować dowolny punkt kodowy Unicode, co czyni je przydatnymi dla znaków pozbawionych nazwanego aliasu. Obie formy dają identyczny wynik w przeglądarce.
Unescaping (zwany też dekodowaniem) to operacja odwrotna: przekształcenie odwołań do encji z powrotem w literalne znaki. Jest to typowe przy wyodrębnianiu tekstu ze źródła HTML, migracji treści między systemami lub debugowaniu szablonów podwójnie kodujących encje. Narzędzie obsługuje oba kierunki w przeglądarce — możesz w ciągu sekund zweryfikować logikę escapowania lub odzyskać zwykły tekst z kodu HTML.
Dlaczego warto używać narzędzia do escapowania HTML?
Ręczne zastępowanie nawiasów kątowych i ampersandów w dużych blokach tekstu jest żmudne i podatne na błędy. Dedykowane narzędzie konwertuje dane wejściowe jednym krokiem, bez żadnej instalacji.
⚡
Natychmiastowa konwersja
Wklej tekst lub kod HTML i od razu otrzymaj wynik escapowania lub unescapingu. Nie ma oczekiwania na odpowiedź serwera — całe przetwarzanie odbywa się lokalnie w JavaScript.
🔒
Przetwarzanie z zachowaniem prywatności
Twoje dane wejściowe nigdy nie opuszczają przeglądarki. Nic nie jest wysyłane na serwer ani nigdzie przechowywane — możesz bezpiecznie escapować znaczniki zawierające dane uwierzytelniające, klucze API lub wewnętrzny kod.
📋
Bez konta i konfiguracji
Otwórz stronę i zacznij wklejać. Nie ma ściany logowania, bramki e-mail ani oprogramowania do zainstalowania. Działa na dowolnym urządzeniu z nowoczesną przeglądarką.
🌐
Pełne pokrycie encji
Obsługuje pięć obowiązkowych znaków specjalnych HTML oraz encje numeryczne (dziesiętne i szesnastkowe). Wspiera konwersję w obie strony: escapowanie, a następnie unescaping zwraca oryginalny ciąg znaków.
Przypadki użycia escapowania HTML
Programista frontend: wyświetlanie danych od użytkownika
Podczas renderowania tekstu przesłanego przez użytkownika w obrębie strony należy go najpierw zescapować, aby przeglądarka nie interpretowała go jako tagów HTML. To podstawowa ochrona przed atakami stored XSS w każdym szablonie wypisującym surowe ciągi znaków.
Programista backend: generowanie odpowiedzi HTML
Kod po stronie serwera łączący ciągi znaków w HTML musi escapować wartości dynamiczne przed ich wstawieniem. Użyj tego narzędzia, aby sprawdzić, czy Twoja funkcja escapowania generuje poprawny wynik dla przypadków brzegowych, takich jak zagnieżdżone cudzysłowy.
DevOps: osadzanie konfiguracji w HTML
Kod JSON lub polecenia powłoki osadzone w stronie HTML (na przykład w tagu script lub atrybucie data) wymagają escapowania. Sprawdź, czy nawiasy kątowe i ampersandy w Twoich fragmentach konfiguracji są prawidłowo zakodowane.
Inżynier QA: testowanie wektorów XSS
Wklej typowe ładunki XSS do narzędzia, aby potwierdzić, że dane wyjściowe Twojej aplikacji odpowiadają poprawnie zescapowanej wersji. Porównaj wynik escapowania znak po znaku z tym, co generuje Twoja aplikacja.
Pisarz techniczny: przykłady kodu w dokumentacji
Publikowanie fragmentów kodu w dokumentacji opartej na HTML (Jekyll, Hugo, niestandardowe CMS-y) wymaga escapowania nawiasów kątowych dla składni typów generycznych i symboli zastępczych szablonów. Wklej przykład kodu, a każdy znak specjalny zostanie natychmiast zakodowany.
Student: nauka encji HTML
Wpisz lub wklej dowolny znak i sprawdź jego nazwaną oraz numeryczną formę encji. Eksperymentuj z przypadkami brzegowymi, takimi jak niełamiące spacje, myślniki em i symbole Unicode, aby zrozumieć zasady kodowania znaków w HTML.
Tabela encji HTML
Poniższa tabela zawiera najczęściej używane encje HTML. Pięć znaków specjalnych (& < > " ') musi być zawsze escapowanych w treści HTML i wartościach atrybutów. Pozostałe encje są opcjonalne, ale przydatne dla znaków trudnych do wpisania lub niejednoznacznych w kodzie źródłowym.
Obie operacje są wzajemnie odwrotne. Wybranie złego kierunku powoduje podwójne kodowanie lub niezabezpieczone wyjście.
Escape (kodowanie)
Stosuj przy wstawianiu niezaufanego lub dynamicznego tekstu do HTML. Konwertuje literalne < na <, dzięki czemu przeglądarka wyświetla znak zamiast otwierać tag. Stosuj przed renderowaniem danych od użytkownika, wpisów logów lub dowolnego ciągu znaków, który może zawierać znaczniki.
Unescape (dekodowanie)
Stosuj przy wyodrębnianiu zwykłego tekstu ze źródła HTML. Konwertuje < z powrotem na <. Stosuj przy migracji treści z CMS, parsowaniu zescrapowanego HTML lub naprawianiu podwójnie zakodowanych ciągów, takich jak &amp;, które wyświetlają nazwy encji zamiast znaków.
Przykłady kodu
Poniżej znajdują się działające przykłady escapowania i unescapingu HTML w czterech językach programowania. Każdy fragment obejmuje oba kierunki i obsługuje przypadki brzegowe, takie jak zagnieżdżone cudzysłowy i encje numeryczne.
Jaka jest różnica między escapowaniem HTML a kodowaniem URL?
Escapowanie HTML zastępuje znaki specjalne w HTML (< > & " ') odwołaniami do encji, takimi jak <, aby były wyświetlane jako tekst. Kodowanie URL (kodowanie procentowe) zastępuje znaki niebezpieczne w URL sekwencjami szesnastkowymi %XX. Chronią różne konteksty: escapowanie HTML zapobiega wstrzykiwaniu znaczników, a kodowanie URL zapewnia poprawność ciągów zapytań i segmentów ścieżek.
Które znaki muszą być escapowane w HTML?
Pięć znaków, które muszą być zawsze escapowane, to: & (ampersand), < (mniejszy niż), > (większy niż), " (cudzysłów wewnątrz atrybutów) oraz ' (apostrof wewnątrz atrybutów). Brak escapowania któregokolwiek z nich może zakłócić renderowanie lub stworzyć podatność na atak cross-site scripting.
Czy ' jest poprawne w HTML5?
Tak. Nazwana encja ' jest zdefiniowana w specyfikacji HTML5 i obsługiwana przez wszystkie nowoczesne przeglądarki. Nie była częścią HTML 4, który rozpoznawał tylko &, <, > i ". Jeśli musisz obsługiwać bardzo stare parsery HTML 4, użyj formy numerycznej '.
Jak naprawić podwójnie zakodowane encje HTML, takie jak &amp;?
Podwójne kodowanie następuje, gdy już zescapowany ciąg trafia ponownie przez funkcję escapowania. Rozwiązaniem jest unescaping do momentu ustabilizowania się wyniku. Wklej podwójnie zakodowany ciąg do tego narzędzia w trybie unescapingu, a następnie uruchom je ponownie, jeśli nadal pozostają odwołania &. Aby zapobiec podwójnemu kodowaniu, sprawdź, czy dane wejściowe są już zescapowane, zanim zastosujesz funkcję escapowania.
Czy mogę używać encji HTML wewnątrz ciągów JavaScript?
Encje HTML są interpretowane przez parser HTML, a nie silnik JavaScript. Wewnątrz bloku script kod jest wykonywany po tym, jak parser HTML przetworzy stronę, więc < w bloku script staje się < zanim JavaScript to zobaczy. W przypadku wbudowanych procedur obsługi zdarzeń (onclick itp.) wartość atrybutu jest najpierw dekodowana przez HTML, a następnie wykonywana jako JavaScript. W zewnętrznych plikach .js encje nie mają specjalnego znaczenia i są traktowane jako literalny tekst.
Jaka jest różnica między htmlspecialchars a htmlentities w PHP?
htmlspecialchars() escapuje tylko pięć znaków specjalnych (& < > " '), które wpływają na strukturę HTML. htmlentities() escapuje te pięć oraz każdy znak posiadający nazwaną encję HTML, taki jak znak praw autorskich i litery akcentowane. Do celów bezpieczeństwa wystarczy htmlspecialchars() z ENT_QUOTES. htmlentities() jest przydatne, gdy potrzebujesz wyjścia bezpiecznego w ASCII dla systemów nieobsługujących UTF-8.
Czy escapowanie HTML wystarczy, aby zapobiec XSS?
Escapowanie HTML zapobiega XSS w najczęstszym przypadku: wstawianiu niezaufanego tekstu do treści elementów HTML lub wartości atrybutów. Nie chroni innych kontekstów wstrzykiwania. Wstawianie danych użytkownika do bloku script wymaga escapowania ciągów JavaScript. Wstawianie do atrybutu style wymaga escapowania CSS. Wstawianie do atrybutu URL (href, src) wymaga walidacji URL oraz kodowania. Pełna ochrona przed XSS stosuje kontekstowo odpowiednie escapowanie w każdym punkcie wstawiania.