~ / developer / html-entity

&; HTML 엔티티 인코더 / 디코더

< > & 같은 HTML 특수문자를 엔티티로 바꾸거나, &lt; &#x1F600; 처럼 인코딩된 글을 원래 글자로 돌려요. 자주 쓰는 엔티티 표는 눌러서 바로 복사할 수 있어요.

options
작업
인코딩 범위
숫자 참조 형식
옵션
옵션
output
자주 쓰는 엔티티 — 행을 누르면 복사
글자이름10진수16진수설명
&&amp;&#38;&#x26;앰퍼샌드 — 항상 바꿔야 함
<&lt;&#60;&#x3C;작다 — 태그 시작이라 항상 바꿔야 함
>&gt;&#62;&#x3E;크다
"&quot;&#34;&#x22;큰따옴표 — 속성값 안에서 필수
'&apos;&#39;&#x27;작은따옴표 (HTML5, 호환성은 &#39;이 더 좋음)
(공백)&nbsp;&#160;&#xA0;줄바꿈 없는 공백
(공백)&ensp;&#8194;&#x2002;en 공백 (반각)
(공백)&emsp;&#8195;&#x2003;em 공백 (전각)
(공백)&thinsp;&#8201;&#x2009;얇은 공백
(공백)&shy;&#173;&#xAD;소프트 하이픈 (줄 끝에서만 보임)
(공백)&zwj;&#8205;&#x200D;폭 없는 결합자
©&copy;&#169;&#xA9;저작권
®&reg;&#174;&#xAE;등록상표
™&trade;&#8482;&#x2122;상표
…&hellip;&#8230;&#x2026;말줄임표
·&middot;&#183;&#xB7;가운뎃점
•&bull;&#8226;&#x2022;글머리 기호
–&ndash;&#8211;&#x2013;en 대시 (범위 1–10)
—&mdash;&#8212;&#x2014;em 대시
‘&lsquo;&#8216;&#x2018;왼쪽 작은따옴표
’&rsquo;&#8217;&#x2019;오른쪽 작은따옴표
“&ldquo;&#8220;&#x201C;왼쪽 큰따옴표
”&rdquo;&#8221;&#x201D;오른쪽 큰따옴표
«&laquo;&#171;&#xAB;왼쪽 겹화살괄호
»&raquo;&#187;&#xBB;오른쪽 겹화살괄호
×&times;&#215;&#xD7;곱하기
÷&divide;&#247;&#xF7;나누기
±&plusmn;&#177;&#xB1;플러스마이너스
°&deg;&#176;&#xB0;도
≤&le;&#8804;&#x2264;작거나 같다
≥&ge;&#8805;&#x2265;크거나 같다
≠&ne;&#8800;&#x2260;같지 않다
∞&infin;&#8734;&#x221E;무한대
²&sup2;&#178;&#xB2;위 첨자 2
½&frac12;&#189;&#xBD;2분의 1
µ&micro;&#181;&#xB5;마이크로
←&larr;&#8592;&#x2190;왼쪽 화살표
→&rarr;&#8594;&#x2192;오른쪽 화살표
↑&uarr;&#8593;&#x2191;위쪽 화살표
↓&darr;&#8595;&#x2193;아래쪽 화살표
↔&harr;&#8596;&#x2194;양쪽 화살표
€&euro;&#8364;&#x20AC;유로
£&pound;&#163;&#xA3;파운드
¥&yen;&#165;&#xA5;엔·위안
¢&cent;&#162;&#xA2;센트
§&sect;&#167;&#xA7;절
&para;&#182;&#xB6;단락
†&dagger;&#8224;&#x2020;단검표 (주석)
♥&hearts;&#9829;&#x2665;하트
✓&check;&#10003;&#x2713;체크 (HTML5)
☆&star;&#9734;&#x2606;빈 별 (HTML5)
₩(이름 없음)&#8361;&#x20A9;원화 기호 — 이름 있는 엔티티가 없어 숫자로 써야 함

사용법

  1. 인코딩을 고르고 HTML에 넣을 글자를 입력하면 < → &lt;처럼 안전한 엔티티로 바뀌어요. 게시판 글, 코드 예제, 이메일 템플릿에 꺾쇠괄호를 그대로 보여 줘야 할 때 써요.
  2. 범위는 보통 최소(& < > " ')면 충분해요. 인코딩이 깨지는 옛 시스템이나 ASCII만 받는 곳에 넣을 때는 ASCII 밖 문자 모두를 고르면 한글·이모지까지 &#54620; 같은 숫자 참조로 바꿔요.
  3. 디코딩은 &lt;, &#x1F600;, &copy; 같은 이름·10진수·16진수 엔티티를 모두 원래 글자로 돌려요. 크롤링한 텍스트나 API 응답에 &quot;가 섞여 나올 때 쓰세요.
  4. 아래 자주 쓰는 엔티티 표의 행을 누르면 그 엔티티가 복사돼요.

HTML 엔티티란?

HTML에서 <는 태그의 시작, &는 엔티티의 시작이라는 특별한 뜻이 있어요. 그래서 이 글자들을 글자 그대로 화면에 보여 주려면 엔티티(문자 참조)로 바꿔 써야 해요. 엔티티는 세 가지 모양이 있어요.

형식예설명
이름 (named)&copy; → ©읽기 쉬움. HTML5에 2,000여 개가 정의돼 있어요
10진수 숫자 참조&#169; → ©유니코드 코드포인트(10진수). 모든 글자를 쓸 수 있어요
16진수 숫자 참조&#xA9; → ©U+00A9 처럼 유니코드 표기와 같아서 찾기 쉬워요
이모지&#x1F600; → 😀코드포인트 하나로 써요 (서로게이트 쌍으로 쪼개지 않음)

문서가 UTF-8이면 한글·이모지·©는 엔티티 없이 그대로 써도 돼요. 꼭 바꿔야 하는 건 &와 <(그리고 속성값 안의 따옴표)뿐이에요. &nbsp;는 줄이 그 자리에서 바뀌지 않게 붙여 두는 공백이라 "10&nbsp;km"처럼 숫자와 단위를 붙일 때 써요.

XSS 막기: 어디에 넣느냐에 따라 이스케이프가 달라요

사용자가 입력한 글을 HTML에 그대로 넣으면 <script>나 <img onerror=…>가 실행되는 XSS(크로스 사이트 스크립팅)가 생겨요. HTML 이스케이프는 기본 방어지만, 값이 들어가는 자리(컨텍스트)마다 필요한 처리가 달라요.

넣는 자리필요한 처리주의
태그 사이 본문 <p>여기</p>& < > 이스케이프최소 모드로 충분
따옴표로 감싼 속성값 title="여기"& < " ' 이스케이프속성값은 반드시 따옴표로 감싸기
URL 속성 href="여기"URL 인코딩 + 스킴 검사javascript: URL은 엔티티로 못 막아요
<script> 안 JS 값JSON 직렬화 + </ 처리HTML 엔티티는 script 안에서 해석되지 않아요
style · onclick 속성넣지 않기사용자 값을 넣는 것 자체를 피하세요

자바스크립트로 화면에 글을 넣을 때는 innerHTML 대신 textContent를 쓰면 이스케이프가 필요 없어요. React·Vue 같은 프레임워크도 기본으로 이스케이프하지만 dangerouslySetInnerHTML·v-html은 예외예요. 사용자가 쓴 HTML을 일부 허용해야 한다면 직접 이스케이프하지 말고 DOMPurify 같은 검증된 정화(sanitize) 라이브러리를 쓰세요.

이중 인코딩 (&amp;lt;)

이미 인코딩된 &lt;를 한 번 더 인코딩하면 &amp;lt;가 되고, 화면에는 &lt;가 글자 그대로 보여요. 저장할 때 한 번, 출력할 때 또 한 번 이스케이프하면 생기는 흔한 버그예요. 디코딩에서 "남은 엔티티까지 반복 디코딩"을 켜면 여러 겹을 한 번에 풀 수 있어요. 원칙은 저장은 원본 그대로, 출력하는 순간에 한 번만 이스케이프하는 거예요.

모든 변환은 브라우저 안에서만 이뤄져요. 디코딩은 화면에 아무것도 그리지 않는 textarea에서 처리해서, 입력에 스크립트가 있어도 실행되지 않아요. &#128;~&#159;는 HTML 표준에 따라 windows-1252 글자(예: &#150; → –)로 해석해요.

자주 묻는 질문

&lt;와 &gt;는 꼭 바꿔야 하나요?
&와 <는 꼭 바꿔야 해요. >는 본문에서는 대부분 그대로 써도 문제없지만, 관례상 같이 바꾸는 게 안전해요. 속성값 안에서는 그 속성을 감싼 따옴표(" 또는 ')도 바꿔야 해요.
&nbsp;는 일반 공백과 뭐가 다른가요?
&nbsp;(U+00A0)는 줄바꿈이 일어나지 않는 공백이라 "10 km"가 줄 끝에서 10과 km로 갈라지지 않아요. 또 일반 공백 여러 개는 HTML에서 하나로 합쳐지지만 &nbsp;는 합쳐지지 않아요. 다만 여백을 만들려고 &nbsp;를 줄줄이 쓰는 대신 CSS margin을 쓰는 게 좋아요.
&#39;와 &apos; 중 뭘 써야 하나요?
&apos;는 XML과 HTML5에서는 되지만 HTML4와 옛 IE에서는 지원하지 않았어요. 그래서 대부분의 이스케이프 라이브러리는 작은따옴표를 &#39;로 바꿔요. 이 도구도 &#39;를 써요.
HTML 이스케이프만 하면 XSS가 완전히 막히나요?
태그 사이 본문과 따옴표로 감싼 속성값에서는 막혀요. 하지만 href의 javascript: URL, <script> 안의 값, onclick 같은 이벤트 속성은 HTML 엔티티로 막을 수 없어요. 넣는 자리에 맞는 처리를 하고, 가능하면 textContent나 프레임워크의 기본 출력을 쓰세요.
&amp;lt;처럼 이중으로 인코딩된 글은 어떻게 푸나요?
디코딩을 고르고 "남은 엔티티까지 반복 디코딩"을 켜면 &amp;lt; → &lt; → < 처럼 더 바뀌지 않을 때까지 여러 번 풀어요. 결과에 엔티티가 남아 있으면 안내 문구로 알려 드려요.
한글도 엔티티로 바꿔야 하나요?
문서가 UTF-8(<meta charset="utf-8">)이면 바꿀 필요가 없어요. ASCII만 받는 옛 시스템, 인코딩이 확실하지 않은 이메일 템플릿처럼 글자가 깨질 수 있는 곳에서만 "ASCII 밖 문자 모두"로 &#54620; 같은 숫자 참조를 써요.

이 도구와 함께 보면 좋은 글

관련 도구

더 둘러보기

💻 개발자 다른 도구

🔥 많이 찾는 도구

🔮 재미로 한 번 더

📝 읽어 볼 만한 글

글 전체 보기 →