UltKit

HTML 엔티티 변환

HTML이 마크업으로 해석하는 문자를 이스케이프하고, 원하면 ASCII 외 문자도 모두 바꿉니다. 반대로 é나 — 같은 엔티티를 일반 텍스트로 되돌릴 수도 있습니다. 두 방향 모두 브라우저에서 실행되며, 디코딩한 입력은 실제 HTML로 렌더링되지 않습니다.

모드
엔티티 형식
이스케이프 범위

0자 · 0단어 · 0줄

0자 · 0단어 · 0줄

이 브라우저 탭 안에서만 처리됩니다. 입력한 텍스트는 업로드되거나 저장되지 않습니다.

자주 쓰는 문자와 엔티티

이름, 10진수, 16진수 형식은 모두 같은 문자로 디코딩됩니다. 인코더는 자주 쓰는 이름 엔티티 216개를 알고 있으며, 디코더는 HTML 표준의 모든 이름 참조를 이해합니다.

문자이름10진수16진수
&&&&
<&lt;&#60;&#x3C;
>&gt;&#62;&#x3E;
"&quot;&#34;&#x22;
'&apos;&#39;&#x27;
(줄바꿈 없는 공백)&nbsp;&#160;&#xA0;
©&copy;&#169;&#xA9;
®&reg;&#174;&#xAE;
™&trade;&#8482;&#x2122;
€&euro;&#8364;&#x20AC;
£&pound;&#163;&#xA3;
¥&yen;&#165;&#xA5;
—&mdash;&#8212;&#x2014;
–&ndash;&#8211;&#x2013;
…&hellip;&#8230;&#x2026;
«&laquo;&#171;&#xAB;
»&raquo;&#187;&#xBB;
°&deg;&#176;&#xB0;
×&times;&#215;&#xD7;
÷&divide;&#247;&#xF7;
é&eacute;&#233;&#xE9;
π&pi;&#960;&#x3C0;
→&rarr;&#8594;&#x2192;
😀—&#128512;&#x1F600;

HTML 4의 엔티티 252개에서 HTML5의 2,231개까지

문자 참조는 ASCII만으로 문자를 적는 방법입니다. 숫자 참조는 모든 유니코드 코드 포인트에 쓸 수 있으며, 10진수(&#233;)나 16진수(&#xE9;)로 씁니다. 이름 참조는 기억하기 더 쉽습니다. HTML 4는 &eacute; 같은 Latin-1 문자, 그리스 문자, 수학 기호, &mdash;와 &hellip; 같은 인쇄 부호를 포함해 252개를 정의했습니다. 흥미롭게도 &apos;는 여기에 없었습니다. XML에서 온 이 이름은 HTML5에 와서야 유효한 HTML이 되었습니다.

HTML5는 MathML 엔티티 집합을 흡수해 이름 문자 참조를 2,231개로 늘렸으므로, 이제 &check;, &bigstar;, &NotEqualTilde; 같은 이름이 모든 최신 브라우저에서 동작합니다. 이 숫자에는 &amp나 &copy처럼 끝 세미콜론이 없는 옛 표기도 포함됩니다. 파서는 호환성 때문에 여전히 받아들이지만 직접 쓰지는 않는 것이 좋습니다. 이 페이지의 인코더는 널리 지원되는 HTML 4 이름과 &apos;를 출력하고 나머지는 모두 숫자 참조로 바꿉니다. 디코더는 텍스트를 브라우저 자체 파서에 넘기므로 2,231개 이름을 하나도 빠짐없이 이해합니다.

무엇을 이스케이프해야 하고, 이스케이프만으로 부족한 곳은 어디인가

일상적인 작업에는 & < > " '만 설정을 쓰면 됩니다. 텍스트 노드나 따옴표로 감싼 속성을 끝낼 수 있는 다섯 문자를 이스케이프하므로, 페이지에 코드 예시를 보여 주거나 사용자 텍스트를 HTML 안에 안전하게 넣기에 충분합니다. ASCII 외 문자도 모두는 é, €, 이모지까지 참조로 바꿉니다. 일부 오래된 이메일 템플릿이나 인코딩을 망가뜨리는 시스템처럼 UTF-8을 전달하지 못하는 드문 경로를 위한 설정입니다. 이름, 10진수, 16진수는 참조를 적는 방식만 바꿀 뿐이며 셋 모두 같은 문자로 디코딩됩니다. UTF-8로 저장한 페이지라면 악센트 문자에 엔티티가 필요 없습니다.

이스케이프는 HTML 문맥만 보호하고 그 밖의 것은 보호하지 않습니다. script 블록, onclick 같은 인라인 이벤트 핸들러, style 속성, javascript:로 시작할 수 있는 href에 들어가는 텍스트는 다르게 처리해야 하며, 그런 곳에서는 엔티티 인코딩만으로 크로스 사이트 스크립팅을 막을 수 없습니다. React 같은 프레임워크는 기본적으로 텍스트를 이스케이프하므로, 최신 앱에서는 오히려 이중 이스케이프가 더 흔한 버그입니다. 앰퍼샌드가 있어야 할 자리에 사용자가 &amp;를 보게 됩니다. 태그를 아예 없애려면 HTML TXT 변환으로 마크업을 변환하고, URL 안의 이스케이프에는 URL 인코딩을 쓰세요.

자주 묻는 질문

HTML에서 반드시 이스케이프해야 하는 문자는 무엇인가요?
텍스트에서는 &와 <가 필수이고, >는 관례상 이스케이프합니다. 속성 값 안에서는 그 값을 감싸는 따옴표도 이스케이프해야 합니다. 다섯 문자를 모두 이스케이프하면 두 경우를 모두 처리할 수 있습니다.
&nbsp;와 일반 공백은 무엇이 다른가요?
&nbsp;는 줄바꿈 없는 공백(U+00A0)입니다. 공백처럼 보이지만 그 위치에서 줄이 바뀌지 않게 하며, HTML의 일반 공백과 달리 여러 개를 연달아 써도 하나로 합쳐지지 않습니다.
페이지에 앰퍼샌드 대신 &amp;가 보이는 이유는 무엇인가요?
텍스트가 두 번 이스케이프되었기 때문입니다. 한 번은 데이터에서, 또 한 번은 템플릿이나 프레임워크에서입니다. 원본 텍스트를 저장하고 출력할 때 한 계층, 보통 템플릿에서만 이스케이프하세요.
출처를 알 수 없는 HTML을 여기서 디코딩해도 안전한가요?
네. 디코더는 입력을 일반 텍스트 내용으로 파싱하므로 태그가 만들어지지 않고, 스크립트가 실행되지 않으며, 이미지도 불러오지 않습니다. 엔티티 참조만 문자로 바뀝니다.
이름 엔티티와 숫자 엔티티 중 무엇이 더 좋나요?
이름 엔티티는 읽기 쉽고, 숫자 엔티티는 모든 문자와 모든 XML 파서에서 동작합니다. DTD가 없는 XML에서는 &amp;, &lt;, &gt;, &quot;, &apos;만 미리 정의되어 있습니다.