Skip to content

Darmowy koder encji HTML — escape HTML

Koduj encje HTML i znaki specjalne (< > & " ') online — za darmo, bez rejestracji, w 100% w przeglądarce. Wynik nazwany, dziesiętny lub szesnastkowy; nic nie jest wysyłane.

Bez śledzenia Działa w przeglądarce Bezpłatne

Twój tekst jest kodowany lokalnie w przeglądarce i nigdy nie jest wysyłany, rejestrowany ani przechowywany. Pozostaje na tym urządzeniu.

Opcje · Opcje formatu i kodowania
Format encji
0 znaków
Zakodowany HTML
0 znaków
Sprawdzono pod kątem poprawności specyfikacji kodowania encji (nazwane / dziesiętne / szesnastkowe), bezpiecznego dla XSS escape wszystkich pięciu znaków specjalnych w kontekstach HTML i atrybutów, zgodnej konwencji apostrofu ', prywatności danych wejściowych bez sieci i bez przechowywania oraz dostępności (oznaczone kontrolki, ogłoszenia obszaru na żywo przy kodowaniu i kopiowaniu). — Zespół ds. kodowania Go Tools · Jun 17, 2026

Czym jest kodowanie encji HTML?

Kodowanie encji HTML — zwane też escape HTML — to proces zastępowania znaków, które mają w HTML specjalne znaczenie, bezpieczną reprezentacją tekstową zwaną encją, tak aby przeglądarka wyświetlała je jako zwykły tekst, a nie interpretowała jako składnię. Pięć znaków, które mają największe znaczenie, to te, których HTML używa do budowy dokumentu: nawiasy kątowe < i >, które otwierają i zamykają znaczniki, ampersand &, który rozpoczyna encję, oraz cudzysłowy " i ', które ograniczają wartości atrybutów. Gdy którykolwiek z nich pojawi się w treści, która ma być pokazana, a nie wykonana, musi przejść escape, inaczej przeglądarka źle odczyta stronę — w najlepszym razie tekst wyrenderuje się błędnie, w najgorszym atakujący przemyci znacznik <script>.

Warto być precyzyjnym co do tego, co robi to narzędzie. Koduje tekst na encje; nie składa ani nie formatuje dokumentu. Jeśli chcesz odczytać ciąg kodu na stronie jako zwykły tekst lub wstawiasz dane od użytkownika do swojego HTML i musisz je zneutralizować, to właściwe narzędzie. Jeśli zaś chcesz wciąć i uporządkować istniejącą składnię, to zadanie dla formatera HTML; a aby zamienić encje z powrotem na znaki, użyj dekodera encji HTML.

Istnieją trzy sposoby zapisu dowolnej encji i są one wymienne. Odwołanie nazwane używa przyjaznej dla człowieka etykiety (< dla <, © dla ©); dziesiętne odwołanie liczbowe zapisuje punkt kodowy Unicode znaku w systemie dziesiętnym (< dla <); a odwołanie szesnastkowe zapisuje ten sam punkt kodowy w systemie szesnastkowym (< dla <), odpowiadając notacji U+XXXX standardu Unicode. Encje nazwane czyta się najlepiej, ale istnieją tylko dla znaków mających zdefiniowaną nazwę; encje liczbowe mogą reprezentować dowolny punkt kodowy, dlatego są bezpiecznym rozwiązaniem awaryjnym. Tabela poniżej wymienia encje, po które sięgniesz najczęściej:

| Znak | Nazwana | Dziesiętna | Szesnastkowa | |-----------|-------|---------|-----| | < | &lt; | &#60; | &#x3C; | | > | &gt; | &#62; | &#x3E; | | & | &amp; | &#38; | &#x26; | | " | &quot; | &#34; | &#x22; | | ' | &#x27; | &#39; | &#x27; | | (spacja) | &nbsp; | &#160; | &#xA0; | | © | &copy; | &#169; | &#xA9; | | ® | &reg; | &#174; | &#xAE; | | ™ | &trade; | &#8482; | &#x2122; | | € | &euro; | &#8364; | &#x20AC; | | £ | &pound; | &#163; | &#xA3; | | — | &mdash; | &#8212; | &#x2014; | | – | &ndash; | &#8211; | &#x2013; | | … | &hellip; | &#8230; | &#x2026; | | é | &eacute; | &#233; | &#xE9; |

Zauważ, że apostrof zapisuje się jako ' (lub '), a nie ': nazwana ' została ustandaryzowana dopiero w HTML5 i XML i jest niebezpieczna w starszych parserach HTML4, więc forma liczbowa — rozumiana wszędzie — to wybór zgodny. To narzędzie stosuje tę samą konwencję co szeroko używana biblioteka he, dlatego domyślnym wynikiem dla ' jest '.

Warto trzymać się rozróżnienia między zestawem znaków a encją, bo wyjaśnia ono opcję „Koduj wszystkie znaki spoza ASCII”. Zestaw znaków (jak UTF-8) określa, jak znaki są przechowywane jako bajty; encja to sposób zapisu znaku przy użyciu wyłącznie zwykłych znaków ASCII & # ; oraz liter lub cyfr. Na nowoczesnej stronie UTF-8 é, — i 😀 są poprawnymi surowymi znakami i nie potrzebują żadnej encji — dlatego tryb domyślny pozostawia je w spokoju. Wymuszasz ich zamianę na encje tylko wtedy, gdy tekst musi przejść przez system, który nie radzi sobie z surowym UTF-8, i wtedy każdy punkt kodowy spoza ASCII zostaje przepisany jako bezpieczne dla ASCII odwołanie liczbowe lub nazwane. A ponieważ wszystko to działa w Twojej przeglądarce, składnia, którą poddajesz escape — nawet prywatny szablon czy nieopublikowany szkic — nigdy nie przechodzi przez sieć. Przy pokrewnych konwersjach narzędzia Escape JSON oraz Base64 koder / dekoder obsługują odpowiednio escape ciągów JavaScript oraz bezpieczny binarnie transport.

// Server-side templates auto-escape, but when you build HTML by hand you must escape yourself.
// The five reserved characters and their safe entities:
//   <  →  &lt;     >  →  &gt;     &  →  &amp;     "  →  &quot;     '  →  &#x27;

// Node.js — escape untrusted input before inserting it into HTML element content.
function escapeHtml(str) {
  return str
    .replace(/&/g, '&amp;')   // & first, so later entities are not double-escaped
    .replace(/</g, '&lt;')
    .replace(/>/g, '&gt;')
    .replace(/"/g, '&quot;')
    .replace(/'/g, '&#x27;'); // numeric form — safe in HTML4, HTML5 and XML
}

const userInput = `<a href="x">Tom & Jerry's</a>`;
const safe = escapeHtml(userInput);
// → &lt;a href=&quot;x&quot;&gt;Tom &amp; Jerry&#x27;s&lt;/a&gt;
document.getElementById('out').innerHTML = `<p>${safe}</p>`; // renders as literal text

// ---------------------------------------------------------------
// In practice, prefer the platform's built-in escaping where it exists:
//   - React / Vue / Angular escape interpolated text by default
//   - Use textContent instead of innerHTML when you only need text:
//       el.textContent = userInput;  // the browser escapes for you
//   - Server frameworks (Jinja, ERB, Blade) auto-escape unless you opt out

Kluczowe funkcje

Poprawnie poddaje escape pięć znaków zarezerwowanych

< > & " ' są zamieniane na bezpieczne encje dokładnie tak, jak zrobiłaby to zahartowana biblioteka chroniąca przed XSS — w tym zgodny ' dla apostrofu zamiast niebezpiecznego w HTML4 '. To dokładnie ten zestaw, który neutralizuje niezaufane dane w kontekstach elementów i atrybutów HTML.

Wynik nazwany, dziesiętny i szesnastkowy

Otrzymaj te same znaki jako czytelne encje nazwane (<, ©), dziesiętne odwołania liczbowe (<) lub odwołania szesnastkowe (<). Wybierz formę, której oczekuje Twój system docelowy; wszystkie trzy rozwijają się do identycznych znaków po sparsowaniu.

Opcjonalny tryb kodowania wszystkiego spoza ASCII

Domyślnie escape obejmuje tylko znaki zarezerwowane, pozostawiając akcenty i emoji jako czytelny surowy UTF-8. Zaznacz jedno pole, by zamienić każdy punkt kodowy powyżej 0x7F na bezpieczną dla ASCII encję dla starszych zestawów znaków lub systemów psujących UTF-8.

Kodowanie na żywo, natychmiastowe

Wynik aktualizuje się podczas pisania — bez przycisku zatwierdzania, bez opóźnień obiegu sieciowego. Wklej duży blok składni, a wynik po escape pojawi się od razu, gotowy do skopiowania.

Wbudowany szybki przegląd encji

Tabela referencyjna najczęstszych encji — pięciu zarezerwowanych plus ©, ®, ™, €, —,   i więcej — znajduje się bezpośrednio na stronie w formie nazwanej, dziesiętnej i szesnastkowej, dzięki czemu nigdy nie musisz szukać encji gdzie indziej.

Zamiana na dekoder jednym kliknięciem

Zamień kierunek przeskakuje prosto do dekodera encji HTML, aby odwrócić operację. Kodowanie i dekodowanie są dokładnie odwrotne, więc możesz przepuszczać tekst tam i z powrotem bez strat.

W 100% prywatne, tylko w przeglądarce

Całe kodowanie odbywa się na Twoim urządzeniu w JavaScripcie — bez żądań sieciowych, bez rejestrowania, bez przechowywania, co można sprawdzić w Narzędziach deweloperskich → Sieć. Prywatna składnia, szablony e-maili i nieopublikowane szkice nigdy nie opuszczają karty.

Dostępne w 15 językach

Cały interfejs — etykiety, instrukcje i wskazówki — jest zlokalizowany w 15 językach, więc narzędzie i jego porady dotyczące escape są zrozumiałe niezależnie od tego, gdzie pracuje Twój zespół.

Przykłady z omówieniem

Escape fragmentu HTML (domyślny tryb „znaki specjalne”)

<a href="x">Tom & Jerry's</a>
&lt;a href=&quot;x&quot;&gt;Tom &amp; Jerry&#x27;s&lt;/a&gt;

W domyślnym trybie „znaki specjalne” koder przepisuje tylko pięć znaków, które mają znaczenie w składni HTML: < staje się <, > staje się >, & staje się &, " staje się ", a ' staje się '. Apostrof jest zapisywany jako liczbowy ', a nie nazwany ', ponieważ ' nie jest zdefiniowany w HTML4 i starsze parsery mogą się na nim wykładać, podczas gdy forma szesnastkowa jest rozumiana wszędzie. Po zakodowaniu przeglądarka renderuje ciąg jako zwykły tekst — znacznik <a> jest wyświetlany, a nie klikalny — dokładnie tak, jak bezpiecznie pokazuje się składnię na stronie.

Znaki spoza ASCII są zachowywane w trybie domyślnym

Visit our café — it's 😀
Visit our café — it&#x27;s 😀

Tryb „znaki specjalne” dotyka tylko pięciu zarezerwowanych znaków HTML, więc litery z akcentami (café), pauza (—) i emoji (😀) przechodzą bez zmian. Dzięki temu wynik pozostaje czytelny i lekki, czego oczekujesz na stronach UTF-8, które deklarują już <meta charset="utf-8">. Tylko apostrof w „it's” jest zamieniany na '. Jeśli potrzebujesz, by każdy znak spoza ASCII został zamieniony na encję dla starszego zestawu znaków, zaznacz „Koduj wszystkie znaki spoza ASCII” — zobacz przykład poniżej.

Dziesiętne encje liczbowe

<>&"'
&#60;&#62;&#38;&#34;&#39;

Przełącz format na dziesiętny, a każdy znak specjalny zostanie zapisany jako dziesiętne liczbowe odwołanie znakowe: < to <, > to >, & to &, " to ", a ' to '. Encje dziesiętne to najszerzej zgodna forma liczbowa — rozumie je każdy zgodny ze specyfikacją parser HTML i XML — co czyni je bezpiecznym wyborem, gdy nie masz pewności, czy system docelowy obsługuje encje nazwane takie jak ©.

Szesnastkowe encje liczbowe

<>&"'
&#x3C;&#x3E;&#x26;&#x22;&#x27;

Format szesnastkowy zapisuje każdy znak jako szesnastkowe odwołanie liczbowe: < to <, > to >, & to &, " to ", a ' to '. Forma szesnastkowa i dziesiętna są wymienne — obie odwołują się do tego samego punktu kodowego Unicode — ale szesnastkowa odpowiada jeden do jednego notacji U+XXXX, którą widzisz w standardzie Unicode, więc wielu programistów woli ją przy dokumentowaniu lub analizie konkretnych punktów kodowych.

Koduj wszystkie znaki spoza ASCII

café
caf&eacute;  (named)  ·  caf&#233;  (decimal)  ·  caf&#xE9;  (hex)

Zaznacz „Koduj wszystkie znaki spoza ASCII”, a każdy punkt kodowy powyżej 0x7F zostanie zamieniony na encję, nie tylko pięć zarezerwowanych. Litera é w café staje się nazwaną é, dziesiętną é lub szesnastkową é w zależności od wybranego formatu — wszystkie trzy odwołują się do tego samego znaku, U+00E9. Ten tryb jest przeznaczony dla stron serwowanych w zestawie znaków innym niż Unicode lub dla systemów, które psują surowy UTF-8, gdzie wymuszenie wszystkiego do bezpiecznych 7-bitowych encji ASCII gwarantuje, że tekst przetrwa transport w całości.

Jak używać kodera encji HTML

  1. 1

    Wklej swój HTML lub tekst

    Wrzuć składnię lub zwykły tekst, który chcesz poddać escape, do pola wejściowego. Zakodowany wynik aktualizuje się na żywo podczas pisania — nie ma przycisku zatwierdzania i nic nie jest nigdzie wysyłane.

  2. 2

    Wybierz format encji

    Nazwany to czytelny domyślny wybór (<, &, ©). Przełącz na dziesiętny (<) lub szesnastkowy (<), gdy system docelowy woli odwołania liczbowe lub nie możesz zagwarantować obsługi encji nazwanych.

  3. 3

    Opcjonalnie zakoduj wszystko spoza ASCII

    Pozostaw tę opcję wyłączoną dla nowoczesnych stron UTF-8, aby akcenty i emoji pozostały czytelnymi surowymi znakami. Zaznacz ją tylko wtedy, gdy tekst musi przetrwać starszy jednobajtowy zestaw znaków — wtedy każdy znak powyżej 0x7F zamienia się na bezpieczną dla ASCII encję.

  4. 4

    Skopiuj zakodowany wynik

    Kliknij Kopiuj, by umieścić ciąg po escape w schowku, gotowy do wklejenia w szablon, stronę dokumentacji lub pole bazy danych. Wyczyść resetuje oba panele dla kolejnego fragmentu.

  5. 5

    Potrzebujesz operacji odwrotnej? Zamień kierunek

    Użyj „Zamień kierunek”, by przełączyć się na dekoder encji HTML, gdy chcesz zamienić encje z powrotem na znaki, które reprezentują.

Częste błędy przy kodowaniu HTML

Escape ampersanda na końcu, powodujący podwójne escape

Jeśli zastąpisz < i > przed &, encje, które właśnie utworzyłeś, dostają swój & ponownie poddany escape, więc < zamienia się w &lt; i renderuje jako dosłowny tekst. Zawsze poddawaj escape & jako pierwszy.

✗ Niepoprawne
replace < and > first, then &  →  &lt;  becomes  &amp;lt;
✓ Poprawne
escape & first, then the rest  →  &lt;  stays  &lt;

Użyto ' dla apostrofu w starszych kontekstach

' jest niezdefiniowany w HTML4, a niektóre klienty poczty pokazują go dosłownie. Używaj liczbowego ' lub ', które rozumie każdy parser, gdy celujesz w starsze lub mieszane środowiska.

✗ Niepoprawne
It&apos;s here  →  may render as  It&apos;s here
✓ Poprawne
It&#x27;s here  →  renders as  It's here

Zakodowano dane dwukrotnie

Przepuszczenie już poddanego escape tekstu przez koder ponownie podwójnie go koduje: & staje się &amp; i użytkownik widzi & zamiast &. Poddawaj escape dokładnie raz, w momencie wyjścia.

✗ Niepoprawne
&amp;  encoded again  →  &amp;amp;  shows as  &amp;
✓ Poprawne
&amp;  left as-is  →  renders as  &

Użyto escape HTML dla kontekstu URL lub JavaScript

Encje HTML nie czynią wartości bezpieczną wewnątrz adresu URL ani skryptu inline. Spacja w adresie URL potrzebuje %20, a ciąg w JavaScripcie potrzebuje escape JS/JSON. Dopasuj kodowanie do miejsca, w którym ląduje wartość.

✗ Niepoprawne
href="/search?q=a&amp;b c"  →  the space still breaks the URL
✓ Poprawne
href="/search?q=a%26b%20c"  →  URL-encoded, valid

Niepotrzebnie zakodowano znaki spoza ASCII na stronie UTF-8

Wymuszenie café na café na nowoczesnej stronie UTF-8 rozdyma źródło i pogarsza czytelność bez korzyści. Zostaw znaki spoza ASCII surowe, chyba że starszy zestaw znaków naprawdę wymaga encji.

✗ Niepoprawne
caf&eacute; on a UTF-8 page  →  needless, harder to read
✓ Poprawne
café on a UTF-8 page  →  valid and clean

Zapomniano poddać escape cudzysłowy wewnątrz wartości atrybutu

Wstawienie niepoddanego escape " do atrybutu pozwala wartości wyrwać się i wstrzyknąć nowe atrybuty — to wektor XSS. Zawsze poddawaj escape " (i najlepiej ') w kontekście atrybutu, co to narzędzie robi domyślnie.

✗ Niepoprawne
title="He said "hi""  →  attribute breaks out
✓ Poprawne
title="He said &quot;hi&quot;"  →  contained

Kto korzysta z tego narzędzia

Wyświetlanie próbek kodu na stronie internetowej
Piszesz tutorial lub dokumentację, która musi pokazać dosłowny HTML? Poddaj fragment escape, aby <strong>bold</strong> pojawił się jako tekst, a nie wyrenderował. Wklej składnię, skopiuj wynik po escape i wstaw go w blok <pre> lub <code>.
Oczyszczanie danych użytkownika przed XSS
Zanim wstawisz dowolny ciąg od użytkownika do swojego HTML, poddaj escape pięć znaków zarezerwowanych, aby ładunek taki jak <script>…</script> stał się martwym tekstem. To podstawowa obrona przed cross-site scripting, gdy budujesz składnię ręcznie.
Przechowywanie składni w polu bazy danych lub JSON
Musisz zapisać fragment HTML jako zwykły ciąg bez jego interpretacji dalej? Najpierw go zakoduj, aby nawiasy kątowe i ampersandy przetrwały przechowanie i ponowne wyświetlenie w nienaruszonej formie, a potem zdekoduj przy wyjściu.
Tworzenie szablonów e-maili i treści CMS
Klienty poczty i systemy zarządzania treścią są nieprzyjazne wobec surowych znaków specjalnych. Poddaj escape zestaw zarezerwowany — i opcjonalnie wszystko spoza ASCII — aby szablon renderował się spójnie w klientach, które mogą nie współdzielić Twojego zestawu znaków.
Konwersja tekstu dla starszego zestawu znaków
Celujesz w system, który nie radzi sobie z surowym UTF-8? Włącz „Koduj wszystkie znaki spoza ASCII”, aby przepisać każdą literę z akcentem, symbol i emoji jako bezpieczną dla ASCII encję, gwarantując, że tekst przetrwa transport przez kanały czyste 7-bitowo.
Escape wartości atrybutów XML i SVG
XML i wbudowany SVG współdzielą znaki zarezerwowane HTML. Zakoduj cudzysłowy i nawiasy kątowe, aby ciąg z osadzoną składnią bezpiecznie wpasował się w wartość atrybutu bez psucia struktury dokumentu.
Szybkie wyszukanie encji
Zapomniałeś, czy znak towarowy to ™ czy ™? Wpisz znak, odczytaj jego encję nazwaną, dziesiętną i szesnastkową z wyniku lub zajrzyj do wbudowanej tabeli szybkiego przeglądu, nie opuszczając strony.

Jak działa koder

Tryb znaków specjalnych (domyślny)
Domyślnie escape obejmuje tylko pięć zarezerwowanych przez HTML znaków — & < > " ' — zgodnie z regułami serializacji HTML organizacji WHATWG dla bezpiecznego wyniku. & jest zastępowany jako pierwszy, aby encje wygenerowane dla pozostałych znaków nie zostały podwójnie poddane escape. Wszystkie inne znaki, w tym spoza ASCII, przechodzą bez zmian.
Apostrof używa '
Zamiast nazwanego ' — który jest niezdefiniowany w HTML4 i niebezpieczny w niektórych starszych parserach — apostrof jest zwracany jako liczbowy ' (dziesiętnie '), odwołując się do U+0027. Odpowiada to konwencji dobrze przetestowanych bibliotek jak he i gwarantuje, że wynik jest bezpieczny zarówno w HTML4, HTML5, jak i XML.
Kodowanie nazwane, dziesiętne i szesnastkowe
Selektor formatu steruje sposobem zapisu każdego znaku po escape: nazwany używa zdefiniowanych etykiet tam, gdzie istnieją (<, ©), dziesiętny zapisuje punkt kodowy Unicode w systemie dziesiętnym (<), a szesnastkowy w systemie szesnastkowym (<). Formy liczbowe odwołują się do tych samych punktów kodowych co formy nazwane i są wymienne po sparsowaniu.
Opcja kodowania wszystkiego spoza ASCII
Po włączeniu każdy znak o punkcie kodowym powyżej 0x7F jest zamieniany na encję w wybranym formacie — café staje się café (nazwany), café (dziesiętny) lub café (szesnastkowy). Znaki astralne, takie jak emoji, są kodowane pełnym punktem kodowym (😀 → 😀). Daje to wynik czysty 7-bitowo w ASCII dla starszego transportu.
Zestaw znaków a encje
Zestaw znaków określa, jak tekst jest przechowywany jako bajty; encja to sposób zapisu znaku przy użyciu wyłącznie ASCII. Na stronie UTF-8 znaki spoza ASCII nie potrzebują żadnej encji, dlatego tryb domyślny pozostawia je surowe. Kodowanie wszystkiego jest konieczne tylko wtedy, gdy wynik musi przejść przez zestaw znaków inny niż Unicode lub system wrogi UTF-8.
Lokalnie w przeglądarce, zero sieci
Kodowanie działa synchronicznie w JavaScripcie w głównym wątku; nie ma wywołania API, nie ma obiegu do serwera ani przechowywania. Dane wejściowe nigdy nie opuszczają strony, co możesz potwierdzić, obserwując pusty panel Sieć podczas pisania.

Dobre praktyki escape HTML

Escape w momencie wyjścia, we właściwym kontekście
Koduj dane w chwili wstawiania ich do HTML, a nie przy odbiorze, i dopasuj kodowanie do kontekstu. Kodowanie encji HTML jest dla treści elementów i atrybutów HTML; wewnątrz adresów URL używaj kodowania URL, a wewnątrz bloków skryptu escape JavaScript/JSON. Escape w niewłaściwym kontekście pozostawia lukę.
Zawsze poddawaj escape niezaufane dane
Każdy ciąg pochodzący od użytkownika, z przesłanego pliku lub z zewnętrznego API musi przejść escape, zanim trafi do Twojej składni. To podstawowa obrona przed XSS: ładunek taki jak <script>alert(1)</script> staje się martwym tekstem, gdy nawiasy kątowe są encjami.
Preferuj wbudowany escape, gdy istnieje
React, Vue i większość serwerowych silników szablonów automatycznie poddają escape interpolowany tekst; ustawienie element.textContent również robi to za Ciebie. Używaj tego narzędzia do pojedynczych konwersji i do zrozumienia wyniku — ale w kodzie aplikacji opieraj się na automatycznym escape frameworka, a nie pisz go ręcznie.
Zostaw znaki spoza ASCII surowe na stronach UTF-8
Jeśli Twoja strona deklaruje <meta charset="utf-8">, nie koduj akcentów i emoji na encje — surowy UTF-8 jest krótszy, czytelniejszy i równie poprawny. Zarezerwuj „Koduj wszystkie znaki spoza ASCII” dla prawdziwych przypadków starszych zestawów znaków, które faktycznie tego wymagają.
Używaj liczbowego apostrofu w kontekstach mieszanych
Gdy wynik może być odbierany przez starsze parsery, procesory XML lub klienty poczty, preferuj liczbowy ' zamiast nazwanego ' dla apostrofu. Forma liczbowa jest rozumiana wszędzie; forma nazwana nie, a błąkający się dosłowny tekst „'” w renderowanym tekście to częsty, możliwy do uniknięcia błąd.

Najczęściej zadawane pytania

Czy mój tekst jest wysyłany na wasz serwer podczas kodowania?
Nie. Każdy znak jest kodowany w całości w Twojej przeglądarce za pomocą JavaScriptu — otwórz Narzędzia deweloperskie → Sieć, a zobaczysz zero żądań, gdy piszesz lub wklejasz. Nic nie jest wysyłane, rejestrowane ani zapisywane na dysku. Ta prywatność ma znaczenie, bo składnia, którą ludzie poddają escape, jest często wrażliwa: fragment z prywatnego CMS-a, wewnętrzny szablon e-maila, odpowiedź działu obsługi klienta lub szkic wpisu, który nie został opublikowany. W koderze działającym po stronie serwera każda z tych rzeczy wędrowałaby przez sieć do maszyny, której nie kontrolujesz; tutaj tekst nigdy nie opuszcza karty. To cały powód, dla którego warto poddawać HTML escape po stronie klienta, zamiast wklejać go na stronę, która w zasadzie mogłaby przechowywać kopię wszystkiego, co przetwarza.
Co to znaczy poddać HTML escape i po co to robić?
Escape HTML oznacza zastąpienie znaków, które przeglądarka w przeciwnym razie zinterpretowałaby jako składnię, ich odpowiednikami w postaci encji, tak aby były wyświetlane jako zwykły tekst. Klasyczny przypadek to pokazanie kodu na stronie: jeśli chcesz, by odwiedzający przeczytał ciąg <strong>bold</strong>, a nie zobaczył słowo „bold” pogrubione, poddajesz nawiasy kątowe escape do <strong>bold</strong>. Drugi, ważniejszy przypadek to bezpieczeństwo: gdy wstawiasz na stronę niezaufane dane od użytkownika, escape pięciu zarezerwowanych znaków (< > & " ') zapobiega wyrwaniu się tych danych z kontekstu i wstrzyknięciu znacznika <script> — to podstawowa obrona przed cross-site scripting (XSS). Każdy tekst pochodzący od użytkownika, który trafia do Twojego HTML, powinien najpierw przejść escape.
Jaka jest różnica między encjami nazwanymi, dziesiętnymi i szesnastkowymi?
Wszystkie trzy dają ten sam znak; różnią się tylko sposobem zapisu odwołania. Encja nazwana używa czytelnej dla człowieka etykiety — < dla <, & dla &, © dla © — co jest łatwe do odczytania, ale działa tylko dla znaków, które mają zdefiniowaną nazwę. Dziesiętna encja liczbowa zapisuje punkt kodowy Unicode w systemie dziesiętnym, jak < dla < czy é dla é. Encja szesnastkowa zapisuje ten sam punkt kodowy w systemie szesnastkowym, jak < dla < czy é dla é, odzwierciedlając notację U+XXXX ze standardu Unicode. Encje nazwane są najczytelniejsze i są dobrym domyślnym wyborem dla typowych znaków zarezerwowanych; encje liczbowe (dziesiętne lub szesnastkowe) mogą zakodować dowolny punkt kodowy, w tym takie bez nazwy, co czyni je bezpiecznym wyborem, gdy nie możesz zagwarantować, że odbiorca obsługuje konkretną encję nazwaną.
Dlaczego apostrof jest kodowany jako ', a nie '?
Bo ' nie jest bezpieczny wszędzie. Nazwana encja ' została wprowadzona dopiero w HTML5 i XML — nie jest zdefiniowana w HTML4, więc kilka starszych parserów i klientów poczty renderuje ją jako dosłowny tekst „'” zamiast apostrofu. Odwołanie liczbowe ' (lub jego dziesiętny bliźniak ') mapuje się na dokładnie ten sam znak, U+0027, i jest rozumiane przez każdy zgodny ze specyfikacją parser, jaki kiedykolwiek napisano. Idąc za zachowaniem dobrze przetestowanych bibliotek jak he, to narzędzie zwraca dla apostrofu uniwersalnie zgodny ', dzięki czemu wynik można bezpiecznie wstawić w dowolny kontekst HTML, XML lub atrybutu bez niespodzianek.
Czy muszę kodować znaki spoza ASCII, takie jak é, — czy 😀?
Zwykle nie. Jeśli Twoja strona deklaruje <meta charset="utf-8"> — co robi praktycznie każda nowoczesna strona — to litery z akcentami, pauzy i emoji są w pełni poprawne jako surowy UTF-8 i nie wymagają żadnego kodowania. Dlatego domyślny tryb „znaki specjalne” pozostawia je nietknięte, utrzymując wynik krótki i czytelny. Znaki spoza ASCII musisz kodować tylko wtedy, gdy tekst będzie serwowany lub przechowywany w starszym jednobajtowym zestawie znaków albo przejdzie przez system, który psuje surowy UTF-8. W takich przypadkach zaznacz „Koduj wszystkie znaki spoza ASCII”, a każdy punkt kodowy powyżej 0x7F zostanie zamieniony na bezpieczną dla ASCII encję. W razie wątpliwości zostaw ustawienie domyślne i upewnij się, że deklaracja zestawu znaków jest poprawna.
Czy escape HTML chroni mnie przed atakami XSS?
Escape to fundament obrony przed XSS, ale zależy od kontekstu, więc uczciwa odpowiedź brzmi: „tak, gdy stosowany prawidłowo”. Zakodowanie pięciu zarezerwowanych znaków, zanim wstawisz niezaufane dane do treści elementu HTML, niezawodnie powstrzymuje atakującego przed wstrzyknięciem znaczników lub skryptów — ładunek taki jak <script>alert(1)</script> staje się martwym tekstem. Zastrzeżenie jest takie, że HTML ma kilka kontekstów, każdy z własnymi regułami escape: wewnątrz wartości atrybutu musisz poddać escape cudzysłowy (co robi to narzędzie), wewnątrz bloku <script> lub procedury obsługi zdarzeń inline potrzebujesz zamiast tego escape JavaScript, a wewnątrz adresu URL potrzebujesz kodowania URL. Kodowania encji HTML używaj dla kontekstów HTML i atrybutów; dla adresów URL sięgnij po Koder / dekoder URL, a do osadzania ciągu w JavaScripcie lub JSON-ie zobacz narzędzie Escape JSON. Koduj w momencie wyjścia, w kontekście, w którym ląduje dana wartość.
Jak odwrócić tę operację — zamienić encje z powrotem na znaki?
Użyj towarzyszącego dekodera encji HTML. Przyjmuje ciąg pełen encji jak <div> & © i zamienia go z powrotem na prawdziwe znaki <div> & ©, obsługując encje nazwane, odwołania dziesiętne, odwołania szesnastkowe, a nawet starsze encje bez zakończenia, takie jak &copy bez kończącego średnika. Kodowanie i dekodowanie są dokładnie odwrotne dla znaków zarezerwowanych, więc możesz przepuścić tekst przez oba narzędzia bez strat. Jeśli debugujesz, dlaczego strona pokazuje dosłowne &lt; zamiast <, dekoder to najszybszy sposób, by zobaczyć, na co encje faktycznie się rozwijają.
Czy kodowanie zmieni widoczny tekst lub zepsuje mój układ?
Nie — to właśnie cały sens. Encja to po prostu alternatywny zapis znaku: gdy przeglądarka parsuje <, renderuje pojedynczy glif <, identyczny z surowym znakiem. Tak więc poprawnie poddana escape strona wygląda dla odwiedzającego dokładnie tak samo, jak z surowymi znakami; jedyna różnica polega na tym, że przeglądarka traktuje wersję po escape jako tekst, a nie jako składnię. Jedyne, co escape zmienia, to długość i wygląd ciągu źródłowego, dlatego poddajesz escape tylko to, co tego wymaga. Jeśli Twoim celem jest uporządkowanie i wcięcie niechlujnej składni, a nie jej escape, to inne zadanie — użyj wtedy formatera HTML.

Powiązane narzędzia

Zobacz wszystkie narzędzia →