GroundHaus

HTML 엔티티 인코더

HTML에서 의미를 갖는 특수문자를 엔티티로 바꾸거나 되돌립니다. 최소 변환과 전체 변환을 고를 수 있습니다.

결과
문자이름 참조숫자 참조쓰는 곳
&&&모든 엔티티의 시작 문자
<&lt;&#60;태그 시작
>&gt;&#62;태그 끝
"&quot;&#34;속성값 큰따옴표
'&apos;&#39;속성값 작은따옴표
(공백)&nbsp;&#160;줄바꿈 없는 공백
©&copy;&#169;저작권 표시

&를 가장 먼저 바꿔야 합니다. 나중에 바꾸면 앞서 만든 &lt;의 &까지 또 바뀌어 &amp;lt;가 됩니다. 이 도구는 그 순서를 지킵니다. &apos;는 HTML4에서 지원되지 않아 인코딩할 때는 &#39;를 씁니다. 변환은 브라우저 안에서만 이뤄집니다.

사용법 · 예제 · 제한 사항

이게 뭔가요?

HTML에서 특별한 의미를 갖는 문자를 엔티티로 바꾸거나, 엔티티를 원래 문자로 되돌립니다.

왜 필요한가

이런 문자열을 HTML에 그대로 넣으면 화면이 깨집니다.

<a href="/search?q=1&page=2">검색 & 이동</a>

브라우저가 <a>를 태그로 읽어버리기 때문이죠. 글자 그대로 보여주려면 이렇게 바꿔야 합니다.

&lt;a href=&quot;/search?q=1&amp;page=2&quot;&gt;검색 &amp; 이동&lt;/a&gt;

꼭 바꿔야 하는 다섯 글자

문자 이름 참조 숫자 참조 쓰는 곳
& &amp; &#38; 모든 엔티티의 시작 문자
< &lt; &#60; 태그 시작
> &gt; &#62; 태그 끝
" &quot; &#34; 속성값 큰따옴표
' &apos; &#39; 속성값 작은따옴표

순서가 중요합니다

&를 가장 먼저 바꿔야 합니다.

<를 먼저 &lt;로 바꾸고 나서 &를 처리하면, 방금 만든 &lt;의 &까지 또 바뀌어 &amp;lt;가 됩니다. 화면에는 &lt;라는 글자가 그대로 보이죠.

모든 엔티티가 &로 시작하기 때문에 생기는 문제이고, 직접 치환 코드를 짤 때 가장 흔히 밟는 함정입니다. 이 도구는 그 순서를 지킵니다.

최소 변환과 전체 변환

최소 — HTML에서 의미를 갖는 다섯 글자만 바꿉니다. 문서가 UTF-8이라면 한글이나 이모지는 그대로 둬도 됩니다. 대부분의 경우 이걸 쓰세요.

전체 — 아스키(127) 밖의 모든 문자를 숫자 참조로 바꿉니다. 문자 인코딩을 신뢰할 수 없는 곳에 씁니다.

대신 용량이 크게 늘어납니다. 한글 한 글자가 &#54620;처럼 여덟 바이트가 되니까요.

안전하게 만들었습니다

인코딩할 때 문자열을 DOM에 넣었다가 빼내는 흔한 방법을 쓰지 않습니다. 그 방식은 입력이 실제로 파싱되기 때문에, 인코딩을 하려다 오히려 스크립트를 실행시킬 수 있습니다.

디코딩에는 브라우저 파서가 필요하지만(엔티티 이름이 2천 개가 넘습니다), textarea에 넣고 value로만 읽어 스크립트가 실행되지 않게 했습니다.

주의할 점

제작·관리 GroundHaus · 오류 제보 · 데이터 처리 안내

자주 묻는 질문

HTML 엔티티가 왜 필요한가요?

꺾쇠(<)나 앰퍼샌드(&)를 그대로 쓰면 브라우저가 태그나 엔티티의 시작으로 읽어 화면이 깨집니다. 글자 그대로 보여주려면 &lt;, &amp;처럼 바꿔야 합니다.

최소 변환과 전체 변환은 뭐가 다른가요?

최소는 HTML에서 의미를 갖는 다섯 글자(& < > " ')만 바꿉니다. 전체는 아스키 밖의 모든 문자(한글·이모지 포함)를 숫자 참조로 바꿉니다. 일반적인 웹 페이지에는 최소면 충분하고, 인코딩을 못 믿는 레거시 시스템이나 이메일 템플릿에 전체를 씁니다.

왜 &를 가장 먼저 바꾸나요?

나중에 바꾸면 앞서 만든 &lt;의 &까지 또 바뀌어 &amp;lt;가 되기 때문입니다. 모든 엔티티가 &로 시작하므로 반드시 &를 먼저 처리해야 합니다.

왜 안 쓰나요?

HTML4에서 정의되지 않아 오래된 브라우저가 인식하지 못합니다. 그래서 작은따옴표는 숫자 참조인 &#39;로 인코딩하는 게 안전합니다.

입력한 내용이 서버로 가나요?

아니요. 변환은 전부 브라우저 안에서 이뤄집니다.