무료 HTML 엔티티 디코더 — HTML 언이스케이프
온라인에서 HTML 엔티티를 디코딩하고 HTML을 언이스케이프하세요. 무료, 가입 불필요, 100% 브라우저에서 처리. 이름·10진수·16진수 참조를 문자로 되돌리며 업로드 없음.
텍스트는 브라우저에서 로컬로 디코딩되며 업로드, 로깅, 저장되지 않습니다. 이 기기에 머뭅니다.
옵션 · 디코딩 옵션
HTML 엔티티 디코딩이란?
HTML 엔티티 디코딩(HTML 언이스케이프라고도 함)은 문자 참조를 그것이 나타내는 문자로 되돌리는 과정입니다. 인코딩이 글자 그대로의 <를 엔티티 <로 바꿔 브라우저가 텍스트로 표시하게 하는 반면, 디코딩은 그 반대입니다. 문자열에서 <, &, <, >, © 같은 참조를 찾아 각각을 실제 문자(<, &, <, >, ©)로 치환합니다. 이스케이프된 형태로 저장·전송된 마크업이 있고 글자 그대로의 텍스트가 다시 필요할 때, 즉 읽거나 편집하거나 다른 프로그램에 넘기거나 페이지가 < 대신 <를 렌더링하는 이유를 알아낼 때 실행하는 작업입니다.
이 도구가 하는 일을 정확히 짚어 두면 좋습니다. 엔티티를 문자로 디코딩할 뿐, 마크업을 다시 포맷하거나 검증하지는 않습니다. 이스케이프된 문자열을 받아 글자 그대로의 문자를 복구하고 싶다면 이 도구가 알맞습니다. 반대 방향으로 문자를 엔티티로 바꾸려면 HTML 엔티티 인코더를, HTML 블록을 들여쓰고 정돈하려면 HTML 포매터를 사용하세요. 인코딩과 디코딩은 정확한 역연산이므로 인코더를 거쳐 디코더로 되돌아온 문자열은 변하지 않고 돌아옵니다.
디코더가 이해해야 하는 참조에는 세 종류가 있고, 모두 처리합니다. 이름 참조는 정의된 라벨을 사용하고(<는 <, ©는 ©, —는 —), 10진수 숫자 참조는 유니코드 코드 포인트를 10진법으로 쓰며(<는 <), 16진수 숫자 참조는 같은 코드 포인트를 16진법으로 써서(<는 <) 유니코드 표준의 U+XXXX 표기와 맞춥니다. 견고한 디코더는 인코더마다 다른 형태를 출력하므로 이들 중 무엇이든 어떤 조합으로든 받아들입니다. 아래 표는 가장 자주 만나게 될 참조와 각각이 디코딩되는 문자를 보여줍니다.
| 엔티티(이름) | 10진수 | 16진수 | 디코딩 결과 | |----------------|---------|-----|------------| | < | < | < | < | | > | > | > | > | | & | & | & | & | | " | " | " | " | | ' | ' | ' | ' | | |   |   | (줄바꿈 없는 공백) | | © | © | © | © | | ® | ® | ® | ® | | ™ | ™ | ™ | ™ | | € | € | € | € | | £ | £ | £ | £ | | — | — | — | — | | – | – | – | – | | … | … | … | … | | 😀 | 😀 | 😀 | 😀 |
철저한 디코더를 구별 짓는 두 가지 동작이 있습니다. 첫째, 대부분의 이모지를 포함해 U+FFFF 이상의 아스트랄 평면 문자를 깨진 반쪽 문자가 아니라 숫자 참조에서 재구성합니다. 😀은 올바르게 😀가 됩니다. 둘째, 역사적으로 끝의 세미콜론 없이 나타난 소수의 레거시 이름 엔티티에 대해 브라우저의 관대한 파싱을 따르므로, 엄격한 XML이라면 거부할 © 2026도 © 2026으로 디코딩됩니다. 이 도구는 둘 다 수행하며, 널리 쓰이는 he 라이브러리의 동작과 일치해 그 출력이 실제 브라우저가 렌더링하는 것과 같습니다.
모든 디코더에 따라붙는 주의 한 가지: 디코딩된 텍스트는 정의상 언이스케이프된 상태입니다. 디코딩은 교차 사이트 스크립팅으로부터 페이지를 보호하는 이스케이프의 역이므로, <script> 태그나 이벤트 핸들러가 든 디코딩 문자열은 다시 살아 있는 위험한 마크업입니다. 신뢰할 수 없는 입력을 디코딩한 뒤 innerHTML로 페이지에 삽입하지 마세요. 이는 인코딩이 막으려던 바로 그 구멍을 다시 엽니다. 읽기, 편집, 저장을 위해 원시 문자가 필요할 때 디코딩하고, 결과를 HTML로 다시 렌더링할 것이라면 먼저 도착하는 문맥에서 다시 이스케이프하세요. 그리고 모든 바이트가 브라우저에서 처리되므로 디코딩하는 이스케이프 문자열은(비공개 기록이나 미게시 초안이라도) 네트워크를 건너지 않습니다. 인접한 변환으로 URL 인코더 / 디코더는 퍼센트 인코딩을, Base64 인코드 / 디코드는 바이너리 안전 전송을 처리합니다.
// Decoding is the inverse of escaping. The classic round-trip:
// < → < > → > & → & " → " ' → '
// Browser — the safest decoder is the platform itself. Use textarea, NOT innerHTML on a live node,
// so the decoded markup is never executed.
function decodeHtml(str) {
const ta = document.createElement('textarea');
ta.innerHTML = str; // the parser resolves entities into text
return ta.value; // .value is plain text — no script runs
}
decodeHtml('<div> & ©'); // → '<div> & ©'
decodeHtml('<>'); // → '<>'
decodeHtml('😀'); // → '😀'
decodeHtml('© 2026'); // → '© 2026' (lenient, no semicolon)
// ---------------------------------------------------------------
// SECURITY: decoded text is unescaped. Never do this with untrusted input:
// el.innerHTML = decodeHtml(userInput); // ❌ reopens the XSS hole
// If the decoded value must be displayed, re-escape it in its destination context first,
// or assign it as text:
// el.textContent = decodeHtml(userInput); // ✅ shown as literal text
// ---------------------------------------------------------------
// Node.js (no DOM) — use a tested library such as he:
// import { decode } from 'he';
// decode('<div> & ©'); // → '<div> & ©' 주요 기능
이름·10진수·16진수 참조 디코딩
전체 HTML5 이름 엔티티 집합(<, ©, —), 10진수 숫자 참조(<), 16진수 참조(<)를 브라우저와 똑같이 어떤 조합으로든 해석하므로, 인코더가 만든 것이라면 무엇이든 되돌립니다.
이모지와 아스트랄 평면 문자 처리
U+FFFF를 넘는 숫자 참조가 완전한 코드 포인트로 재구성되어 😀이 깨진 서로게이트가 아니라 😀로 디코딩됩니다. 드문 CJK 한자와 수학 기호도 충실히 디코딩됩니다.
관대한 레거시 엔티티 파싱
끝의 세미콜론이 빠진 이름 엔티티에 대해 브라우저의 하위 호환 규칙을 따르므로, 엄격한 파서라면 깨진 채 두었을 © 2026 같은 레거시·어수선한 마크업도 © 2026으로 디코딩됩니다.
실시간 즉시 디코딩
입력하는 대로 출력이 갱신됩니다. 제출 버튼도, 왕복 지연도 없습니다. 큰 이스케이프 블록을 붙여넣어도 복구된 텍스트가 즉시 나타나 복사할 준비가 됩니다.
엔티티 빠른 참조 내장
예약된 다섯 문자에 ©, ®, ™, €, —, 등을 더한 가장 흔한 엔티티를 해당 문자에 매핑한 참조 표가 페이지에 바로 있어, 엔티티를 다른 곳에서 찾아볼 필요가 없습니다.
원클릭으로 인코더 전환
방향 전환이 곧바로 HTML 엔티티 인코더로 이동해 작업을 되돌립니다. 인코딩과 디코딩은 정확한 역연산이므로 손실 없이 텍스트를 왕복할 수 있습니다.
100% 비공개, 브라우저 전용
모든 디코딩이 자바스크립트로 기기에서 처리됩니다. 네트워크 요청도, 로깅도, 저장도 없으며 DevTools → 네트워크에서 확인할 수 있습니다. 비공개 데이터베이스 조각, 이메일 콘텐츠, 미게시 초안이 탭을 벗어나지 않습니다.
15개 언어 지원
라벨, 설명, 안내를 포함한 전체 인터페이스가 15개 언어로 현지화되어, 팀이 어디서 일하든 도구와 보안 조언이 명확합니다.
실전 예제
여러 이름 엔티티 디코딩
<div> & ©
<div> & ©
디코더는 각 이름 참조를 그것이 나타내는 문자로 해석합니다. <는 <로, >는 >로, &는 &로, ©는 저작권 기호 ©가 됩니다. 이는 일상적인 경우로, 이스케이프된 형태로 저장·전송된 문자열을 실제 문자로 되돌려 마크업을 읽고 편집하거나 다시 처리할 수 있게 합니다. 디코딩은 인코딩의 정확한 역연산이므로 인코더를 거쳐 다시 돌아온 문자열은 변하지 않고 도착합니다.
10진수 및 16진수 숫자 참조 디코딩
<>
<>
숫자 문자 참조는 두 진법 모두에서 동작합니다. <는 코드 포인트 60의 10진수 형태로 <이고, >는 코드 포인트 62의 16진수 형태로 >입니다. 디코더는 10진수(&#NNN;)와 16진수(&#xHHH;) 참조를 서로 바꿔 처리하며 각각을 유니코드 문자로 해석합니다. 인코더마다 어느 형태를 출력할지 의견이 갈리므로(일부는 10진수, 일부는 16진수) 견고한 디코더는 둘 다 받아들여야 합니다.
세미콜론이 빠진 레거시 엔티티 디코딩
© 2026
© 2026
오래된 HTML은 소수의 이름 엔티티가 끝의 세미콜론 없이 나타나는 것을 허용했고, 브라우저는 하위 호환성을 위해 여전히 이를 해석합니다. © 2026은 © 2026으로 렌더링됩니다. 이 디코더는 같은 관대한 파싱 규칙을 따르므로, 엄격한 파서라면 그대로 두었을 어수선하거나 레거시인 마크업에서 의도된 문자를 복구합니다. 텍스트에 떠도는 ©를 디버깅하고 있다면 그 이유가 이것입니다.
16진수 참조에서 이모지 디코딩
😀
😀
숫자 참조는 기본 다국어 평면에 국한되지 않습니다. 😀은 코드 포인트 U+1F600, 즉 활짝 웃는 얼굴 이모지 😀의 16진수 참조입니다. 디코더는 숫자 참조에서 아스트랄 평면 문자(U+FFFF 이상)를 올바르게 재구성하므로 이모지, 드문 CJK 한자, 수학 기호가 깨진 서로게이트나 대체 글리프로 변하지 않고 충실히 디코딩됩니다.
이스케이프된 속성 문자열 디코딩
<a href="x">Tom & Jerry's</a>
<a href="x">Tom & Jerry's</a>
이것은 인코더 대표 예제의 완전한 왕복입니다. "는 큰따옴표로, '(호환성이 보장되는 숫자 아포스트로피)는 '로, 꺾쇠괄호와 앰퍼샌드 엔티티는 글자 그대로의 문자로 해석되어 원래의 Tom & Jerry's를 정확히 재구성합니다. 디코더는 이름·10진수·16진수 참조를 어떤 조합으로든 받아들이므로, 어떤 엔티티 스타일이 쓰였든 인코더가 만든 것을 되돌립니다.
HTML 엔티티 디코더 사용법
- 1
이스케이프된 문자열 붙여넣기
HTML 엔티티로 가득한 텍스트를 입력 상자에 넣으세요. 디코딩된 문자는 입력하는 대로 실시간 갱신됩니다. 제출 버튼도 없고 어디로도 전송되지 않습니다.
- 2
디코딩된 결과 읽기
이름·10진수·16진수 참조가 이모지와 그 밖의 아스트랄 평면 코드 포인트를 포함해 그것들이 나타내는 문자로 자동 해석됩니다. 형식 선택이 필요 없습니다. 디코더가 각 참조의 종류를 감지합니다.
- 3
디코딩된 텍스트 복사
복사를 클릭하면 복구된 문자가 클립보드에 담겨 편집기, 데이터베이스, 다른 도구에 붙여넣을 준비가 됩니다. 지우기는 다음 문자열을 위해 양쪽 창을 초기화합니다.
- 4
신뢰할 수 없는 텍스트를 다시 표시하기 전에 재이스케이프
디코딩된 출력을 웹 페이지에 다시 렌더링할 예정이고 그중 일부가 신뢰할 수 없는 출처에서 왔다면, XSS 구멍을 다시 여는 것을 피하기 위해 먼저 인코더로 다시 이스케이프하세요.
- 5
인코딩이 필요하면 방향 전환
원시 문자를 엔티티로 바꾸고 싶을 때 방향 전환으로 HTML 엔티티 인코더로 이동하세요.
흔한 HTML 디코딩 실수
디코딩된 신뢰할 수 없는 입력을 innerHTML로 렌더링
디코딩은 텍스트를 언이스케이프하므로 디코딩된 <script> 태그는 다시 살아 있는 마크업입니다. 이를 innerHTML로 삽입하면 실행됩니다. 교과서적인 XSS 구멍입니다. 디코딩된 신뢰할 수 없는 텍스트를 다시 이스케이프하거나 textContent를 쓰세요.
el.innerHTML = decode(userInput) → script runs (XSS)
el.textContent = decode(userInput) → shown as text
이중 인코딩된 텍스트를 한 번만 디코딩
이중 인코딩된 텍스트에는 두 번의 디코딩이 필요합니다. <를 한 번 디코딩하면 <가 아니라 <가 나옵니다. 다시 디코딩하고, 애초에 이중 인코딩하지 않도록 파이프라인을 고치세요.
&lt; decoded once → < (still an entity)
&lt; decoded twice → <
HTML 디코딩을 URL이나 Base64 디코딩과 혼동
엔티티, 퍼센트 인코딩, base64는 서로 다른 체계입니다. HTML 디코더는 %20을 공백으로 바꾸거나 base64 덩어리를 디코딩하지 않습니다. 각 인코딩 계층에 맞는 도구를 쓰세요.
HTML-decode "%3Cdiv%3E" → unchanged, still percent-encoded
URL-decode "%3Cdiv%3E" → <div>
숫자·아스트랄 참조를 놓치는 정규식 사용
이름 엔티티용으로 직접 작성한 정규식은 <, >, 😀 같은 이모지를 조용히 건너뛰어 출력에 남깁니다. 모든 참조 형태를 다루는 브라우저 파서나 검증된 라이브러리를 쓰세요.
regex for &name; only → 😀 left undecoded
full decoder → 😀 becomes 😀
디코딩 후 출력이 모지바케로 표시
é를 디코딩하면 실제 é가 나오지만, 받는 페이지나 파일이 UTF-8로 제공되지 않으면 문자가 깨진 글자로 손상됩니다. 디코딩된 텍스트를 쓰기 전에 문자셋을 UTF-8로 설정하세요.
decoded é into a Latin-1 file → é mojibake
decoded é into a UTF-8 file → é
엄격한 파싱을 가정해 레거시 엔티티를 놓침
엄격한 XML 파서는 © 같은 세미콜론 없는 엔티티를 무시해 글자 그대로 남깁니다. 브라우저는 이를 해석하므로 충실한 디코더도 그래야 합니다. 그렇지 않으면 출력이 사용자가 보는 것과 어긋납니다.
strict parse of "© 2026" → © 2026 literal
lenient parse of "© 2026" → © 2026
누가 이 도구를 사용하나
- 이스케이프된 형태로 저장된 마크업 읽기
- 데이터베이스, 로그, JSON 필드에서 <div>…처럼 저장된 HTML 조각을 꺼내셨나요? 디코딩해 엔티티의 벽을 들여다보는 대신 실제 마크업을 보고 편집하세요.
- 이중 인코딩된 텍스트 디버깅
- <가 보여야 할 라이브 페이지에서 <가 보이나요? 여기에 붙여넣어 이중 인코딩 여부를 확인하고, 두 번 디코딩해 원본을 복구한 뒤 중복 이스케이프를 파이프라인의 출처까지 추적하세요.
- HTML 조각에서 일반 텍스트 추출
- 이스케이프된 이메일 본문이나 CMS 필드에서 사람이 읽을 수 있는 텍스트가 필요하신가요? 콘텐츠를 색인·검색하거나 다른 곳에 표시하기 전에 엔티티를 디코딩해 실제 문자를 복구하세요.
- 스크랩·내보낸 데이터에서 문자 복구
- 내보내기와 스크레이퍼는 엔티티가 그대로 든 콘텐츠를 전달하는 경우가 많습니다. &, é 등을 해당 문자로 디코딩해, 데이터가 자체 시스템에 들어가기 전에 깨끗하게 만드세요.
- 인코더 출력의 왕복 검증
- 인코더로 문자열을 이스케이프한 뒤 여기서 디코딩해 원본이 변하지 않고 돌아오는지 확인하세요. 깨끗한 왕복은 이스케이프가 올바르고 되돌릴 수 있음을 증명합니다.
- 수수께끼 엔티티 해석
- ™이나 …이 실제로 무엇인지 막히셨나요? 붙여넣고 디코딩된 문자를 읽거나 내장 빠른 참조 표를 보세요. 엔티티 표를 외울 필요가 없습니다.
- 레거시 마크업 안전하게 디코딩
- ©나   같은 세미콜론 없는 엔티티를 일관성 없이 쓰는 오래된 HTML을 다루시나요? 관대한 디코더가 실제 브라우저처럼 의도된 문자를 복구하므로, 정리 결과가 사용자가 실제로 보는 것과 일치합니다.
디코더 작동 원리
- 세 참조 형태 모두 해석
- 디코더는 이름 참조를 전체 HTML5 이름 문자 표와 대조하고, 10진수 참조(&#NNN;)를 10진 코드 포인트로, 16진수 참조(&#xHHH;)를 16진 코드 포인트로 파싱합니다. 각각이 유니코드 문자로 해석되며 세 형태는 입력에서 서로 바꿔 쓸 수 있습니다.
- 아스트랄 평면 재구성
- 코드 포인트가 U+FFFF를 넘는 숫자 참조(대부분의 이모지와 많은 기호)는 올바른 서로게이트 쌍으로 변환되어 문자가 하나의 글리프로 렌더링됩니다. 😀은 깨진 반쪽 문자 둘이 아니라 😀가 됩니다.
- 관대한 레거시 엔티티 처리
- 정의된 일부 이름 엔티티가 역사적으로 끝의 세미콜론 없이 나타났고 브라우저는 여전히 이를 해석합니다. 디코더는 이 동작을 따라 © 2026이 © 2026이 되게 하며, 엄격한 XML 파서가 아니라 실제 브라우저의 렌더링과 일치합니다.
- 일반 텍스트에 멱등
- 인식되는 참조의 일부가 아닌 문자는 입력에 이미 있는 원시 비ASCII 텍스트를 포함해 그대로 통과합니다. 엔티티가 없는 문자열을 디코딩하면 변하지 않고 돌아오므로, 혼합 콘텐츠에서 실행해도 안전합니다.
- 디코딩된 출력은 언이스케이프 상태
- 디코딩은 XSS 방어 이스케이프의 역이므로 결과는 다시 살아 있는 마크업입니다. 이 도구는 이를 드러내어 디코딩된 신뢰할 수 없는 텍스트를 innerHTML로 페이지에 삽입하지 않도록 하니, 렌더링 전에 도착하는 문맥에서 다시 이스케이프하세요.
- 브라우저 로컬, 네트워크 제로
- 디코딩은 메인 스레드에서 자바스크립트로 동기 실행됩니다. API 호출도, 서버 왕복도, 영속 저장도 없습니다. 입력은 페이지를 벗어나지 않으며, 입력하는 동안 비어 있는 네트워크 패널을 지켜보면 확인할 수 있습니다.
HTML 언이스케이프 모범 사례
- 신뢰할 수 없는 디코딩 텍스트를 직접 렌더링하지 말 것
- 디코딩된 출력은 언이스케이프된 마크업입니다. 그중 일부가 사용자나 외부 출처에서 왔다면 페이지에 삽입하기 전에 다시 이스케이프하거나 innerHTML 대신 textContent로 할당하세요. 이를 건너뛰면 이스케이프가 막으려던 교차 사이트 스크립팅 구멍이 다시 열립니다.
- 인코딩의 역순으로 디코딩
- 한 값이 HTML 인코딩, 그다음 URL 인코딩, 그다음 Base64 인코딩될 수 있습니다. 적용된 반대 순서로 계층을 풀고, 각각에 맞는 도구를 쓰세요. 엔티티에는 이 도구를, 퍼센트 인코딩에는 URL 디코더를, base64에는 Base64 도구를 사용합니다.
- 반사적이 아니라 한 번만 디코딩
- 한 번 디코딩한 뒤 < 같은 엔티티가 남아 보이면 입력이 이중 인코딩된 것입니다. 다시 디코딩해 원본을 복구한 다음, 텍스트가 정확히 한 번만 이스케이프되도록 상류 파이프라인을 고치세요. 맹목적으로 반복하지 말고 그 추가 계층이 왜 있는지 이해하세요.
- 결과를 UTF-8로 제공
- 숫자 참조를 디코딩하면 악센트, 기호, 이모지 같은 실제 유니코드 문자가 나옵니다. 디코딩된 텍스트를 받는 페이지, 파일, 필드가 UTF-8인지 확인하세요. 그렇지 않으면 복구된 문자가 깨진 글자(모지바케)로 표시됩니다.
- 애플리케이션 코드에서는 검증된 라이브러리 선호
- 일회성 변환에는 이 도구가 이상적이지만, 운영에서는 직접 만든 정규식보다 잘 검증된 라이브러리(Node의 he, 분리된 textarea를 통한 브라우저 자체 파서)로 디코딩하세요. 직접 만든 정규식은 숫자 참조, 아스트랄 문자, 레거시 엔티티를 흔히 놓칩니다.
자주 묻는 질문
디코딩할 때 내 텍스트가 서버로 전송되나요?
HTML을 디코딩하거나 언이스케이프한다는 것은 무엇인가요?
이 디코더는 어떤 종류의 엔티티를 처리하나요?
왜 텍스트가 < 대신 <를 보여주나요?
디코딩된 출력을 페이지에 다시 넣어도 안전한가요?
디코딩이 비ASCII 문자와 이모지를 올바르게 처리하나요?
텍스트를 다시 엔티티로 인코딩하려면 어떻게 하나요?
이것이 URL 디코딩이나 Base64 디코딩과 같나요?
관련 도구
모든 도구 보기 →Base64 디코더 · 인코더 (Base64 Decoder & Encoder)
인코딩 & 포매팅
Base64를 온라인에서 무료로 인코딩하고 디코딩합니다. UTF-8과 이모지를 완벽 지원하는 실시간 변환으로, 100% 브라우저에서 처리되어 회원 가입이 필요 없습니다.
Base64 이미지 변환기 (온라인)
인코딩 & 포매팅
Base64 문자열이나 데이터 URI를 온라인 브라우저에서 이미지로 디코딩합니다. 미리보고, 치수와 MIME을 읽은 뒤 PNG, JPG, GIF, SVG로 다운로드하세요. 업로드 없음.
CSV to JSON 변환기 (CSV to JSON Converter)
인코딩 & 포매팅
브라우저에서 CSV를 JSON으로 변환합니다. RFC 4180, 타입 추론, 헤더 행, 큰 정수 안전 처리. 100% 비공개, 업로드 없음.
.env을 JSON으로 변환하는 도구
인코딩 & 포매팅
.env 파일을 붙여넣으면 즉시 JSON으로 변환됩니다. 데이터베이스 비밀번호, API 키, 토큰이 브라우저를 절대 벗어나지 않는 100% 비공개 무료 온라인 dotenv 파서입니다.
무료 HTML 엔티티 인코더 — HTML 이스케이프
인코딩 & 포매팅
온라인에서 HTML 엔티티를 인코딩하고 특수문자(< > & " ')를 이스케이프하세요. 무료, 100% 브라우저에서 처리. 이름·10진수·16진수 출력, 업로드 없음.
HTML to Markdown 변환기
인코딩 & 포매팅
브라우저에서 HTML을 깔끔한 Markdown으로 변환 — GFM 테이블·작업 목록·링크, ATX/Setext와 인라인·참조 링크 선택. 웹 이전·LLM 입력에 적합. 100% 비공개.