Skip to content

무료 HTML 엔티티 인코더 — HTML 이스케이프

온라인에서 HTML 엔티티를 인코딩하고 특수문자(< > & " ')를 이스케이프하세요. 무료, 100% 브라우저에서 처리. 이름·10진수·16진수 출력, 업로드 없음.

트래킹 없음 브라우저 실행 무료

텍스트는 브라우저에서 로컬로 인코딩되며 업로드, 로깅, 저장되지 않습니다. 이 기기에 머뭅니다.

옵션 · 형식 및 인코딩 옵션
엔티티 형식
0
인코딩된 HTML
0
엔티티 인코딩 규격 정확성(이름 / 10진수 / 16진수), HTML 및 속성 문맥에서 다섯 특수문자 모두의 XSS 안전 이스케이프, 호환성이 보장되는 ' 아포스트로피 관례, 입력의 무네트워크·무저장 프라이버시, 접근성(라벨이 붙은 컨트롤, 인코딩 및 복사 시 라이브 영역 안내)에 대해 검토했습니다. — Go Tools 인코딩 팀 · Jun 17, 2026

HTML 엔티티 인코딩이란?

HTML 엔티티 인코딩(HTML 이스케이프라고도 함)은 HTML에서 특별한 의미를 갖는 문자를 엔티티라는 안전한 텍스트 표현으로 바꿔, 브라우저가 마크업으로 해석하지 않고 글자 그대로 표시하게 하는 과정입니다. 가장 중요한 다섯 문자는 HTML이 문서를 구조화하는 데 쓰는 것들입니다. 태그를 여닫는 꺾쇠괄호 <와 >, 엔티티를 시작하는 앰퍼샌드 &, 그리고 속성 값을 구분하는 따옴표 "와 '입니다. 이들 중 하나가 실행이 아니라 표시되어야 할 콘텐츠에 나타나면 반드시 이스케이프해야 하며, 그렇지 않으면 브라우저가 페이지를 잘못 읽습니다. 잘되어야 텍스트가 잘못 렌더링되고, 최악의 경우 공격자가 <script> 태그를 끼워 넣습니다.

이 도구가 하는 일을 정확히 짚어 두면 좋습니다. 텍스트를 엔티티로 인코딩할 뿐, 문서를 조립하거나 보기 좋게 정리하지는 않습니다. 페이지에서 코드 문자열을 일반 텍스트로 읽고 싶거나, 사용자 제공 입력을 HTML에 삽입하면서 무력화해야 한다면 이 도구가 알맞습니다. 반대로 기존 마크업을 들여쓰고 정돈하고 싶다면 그것은 HTML 포매터의 일이고, 엔티티를 다시 문자로 바꾸려면 HTML 엔티티 디코더를 사용하세요.

어떤 엔티티든 쓰는 방법은 세 가지이며 서로 바꿔 쓸 수 있습니다. 이름 참조는 사람이 알기 쉬운 라벨을 사용하고(<는 <, ©는 ©), 10진수 숫자 참조는 문자의 유니코드 코드 포인트를 10진법으로 쓰며(<는 <), 16진수 참조는 같은 코드 포인트를 16진법으로 써서(<는 <) 유니코드 표준의 U+XXXX 표기와 맞춥니다. 이름 엔티티가 가장 읽기 좋지만 정의된 이름이 있는 문자에만 존재하고, 숫자 엔티티는 어떤 코드 포인트든 표현할 수 있어 안전한 대안입니다. 아래 표는 가장 자주 쓰게 될 엔티티를 정리한 것입니다.

| 문자 | 이름 | 10진수 | 16진수 | |-----------|-------|---------|-----| | < | &lt; | &#60; | &#x3C; | | > | &gt; | &#62; | &#x3E; | | & | &amp; | &#38; | &#x26; | | " | &quot; | &#34; | &#x22; | | ' | &#x27; | &#39; | &#x27; | | (공백) | &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; |

아포스트로피는 '가 아니라 '(또는 ')로 작성된다는 점에 유의하세요. 이름 엔티티 '는 HTML5와 XML에서만 표준화되어 오래된 HTML4 파서에서는 안전하지 않으므로, 어디서나 이해되는 숫자 형태가 호환되는 선택입니다. 이 도구는 널리 쓰이는 he 라이브러리와 같은 관례를 따르며, 그래서 '의 기본 출력이 '입니다.

문자셋과 엔티티의 구분을 기억해 두는 것이 좋습니다. "모든 비ASCII 인코딩" 옵션을 설명해 주기 때문입니다. 문자셋(예: UTF-8)은 문자가 바이트로 저장되는 방식을 정하고, 엔티티는 일반 ASCII 문자 & # ;와 문자 또는 숫자만으로 문자를 쓰는 방법입니다. 최신 UTF-8 페이지에서 é, —, 😀는 유효한 원시 문자라 엔티티가 전혀 필요 없습니다. 그래서 기본 모드는 이들을 그대로 둡니다. 텍스트가 원시 UTF-8을 다루지 못하는 시스템을 거쳐야 할 때만 엔티티로 강제하며, 그 경우 모든 비ASCII 코드 포인트가 ASCII 안전 숫자 또는 이름 참조로 다시 쓰입니다. 그리고 이 모든 것이 브라우저에서 실행되므로 이스케이프하는 마크업은(비공개 템플릿이나 미게시 초안이라도) 네트워크를 건너지 않습니다. 관련 변환으로 JSON 이스케이프Base64 인코드 / 디코드 도구는 각각 자바스크립트 문자열과 바이너리 안전 전송을 위한 이스케이프를 처리합니다.

// 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

주요 기능

예약된 다섯 문자를 정확히 이스케이프

< > & " '가 견고한 XSS 방지 라이브러리와 똑같이 안전한 엔티티로 변환됩니다. 여기에는 HTML4에서 안전하지 않은 ' 대신 호환성이 보장되는 '로 아포스트로피를 출력하는 것도 포함됩니다. 이것이 HTML 요소·속성 문맥에서 신뢰할 수 없는 입력을 무력화하는 정확한 문자 집합입니다.

이름·10진수·16진수 출력

같은 문자를 읽기 쉬운 이름 엔티티(<, ©), 10진수 숫자 참조(<), 16진수 참조(<)로 얻으세요. 사용하는 시스템이 기대하는 형태를 고르면 됩니다. 셋 모두 파싱되면 동일한 문자로 해석됩니다.

선택적 모든 비ASCII 인코딩 모드

기본적으로 예약 문자만 이스케이프되어 악센트와 이모지가 읽기 쉬운 원시 UTF-8로 남습니다. 체크박스 하나만 켜면 0x7F를 초과하는 모든 코드 포인트가 레거시 문자셋이나 UTF-8을 손상시키는 시스템을 위해 ASCII 안전 엔티티로 변환됩니다.

실시간 즉시 인코딩

입력하는 대로 출력이 갱신됩니다. 제출 버튼도, 왕복 지연도 없습니다. 큰 마크업 블록을 붙여넣어도 이스케이프된 결과가 즉시 나타나 복사할 준비가 됩니다.

엔티티 빠른 참조 내장

예약된 다섯 문자에 ©, ®, ™, €, —,   등을 더한 가장 흔한 엔티티 참조 표가 이름·10진수·16진수 형태로 페이지에 바로 있어, 엔티티를 다른 곳에서 찾아볼 필요가 없습니다.

원클릭으로 디코더 전환

방향 전환이 곧바로 HTML 엔티티 디코더로 이동해 작업을 되돌립니다. 인코딩과 디코딩은 정확한 역연산이므로 손실 없이 텍스트를 왕복할 수 있습니다.

100% 비공개, 브라우저 전용

모든 인코딩이 자바스크립트로 기기에서 처리됩니다. 네트워크 요청도, 로깅도, 저장도 없으며 DevTools → 네트워크에서 확인할 수 있습니다. 비공개 마크업, 이메일 템플릿, 미게시 초안이 탭을 벗어나지 않습니다.

15개 언어 지원

라벨, 설명, 안내를 포함한 전체 인터페이스가 15개 언어로 현지화되어, 팀이 어디서 일하든 도구와 이스케이프 조언이 명확합니다.

실전 예제

HTML 조각 이스케이프(기본 "특수문자" 모드)

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

기본 "특수문자" 모드에서 인코더는 HTML 마크업에서 의미를 갖는 다섯 문자만 다시 씁니다. <는 <로, >는 >로, &는 &로, "는 "로, '는 '로 바뀝니다. 아포스트로피는 이름 엔티티 ' 대신 숫자 '로 출력되는데, '는 HTML4에 정의되어 있지 않아 오래된 파서가 처리하지 못할 수 있는 반면 16진수 형태는 어디서나 인식되기 때문입니다. 인코딩 후 브라우저는 이 문자열을 글자 그대로 렌더링하므로 <a> 태그는 클릭되지 않고 그대로 표시됩니다. 이것이 페이지 안에 마크업을 안전하게 보여주는 방법입니다.

기본 모드에서는 비ASCII 문자가 보존됩니다

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

"특수문자" 모드는 예약된 다섯 HTML 문자만 건드리므로 악센트 문자(café), 엠 대시(—), 이모지(😀)는 그대로 통과합니다. 이렇게 하면 출력이 읽기 쉽고 용량이 가벼워지며, 이미 <meta charset="utf-8">를 선언한 UTF-8 페이지에 적합합니다. "it's"의 아포스트로피만 '로 이스케이프됩니다. 레거시 문자셋을 위해 모든 비ASCII 문자를 엔티티로 변환해야 한다면 "모든 비ASCII 인코딩"을 켜세요. 아래 예시를 참고하세요.

10진수 숫자 엔티티

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

형식을 10진수로 바꾸면 각 특수문자가 10진수 숫자 문자 참조로 작성됩니다. <는 <, >는 >, &는 &, "는 ", '는 '가 됩니다. 10진수 엔티티는 가장 폭넓게 호환되는 숫자 형식으로, 규격을 따르는 모든 HTML·XML 파서가 이해하므로 © 같은 이름 엔티티의 지원 여부를 확신할 수 없을 때 안전한 선택입니다.

16진수 숫자 엔티티

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

16진수 형식은 각 문자를 16진수 숫자 참조로 작성합니다. <는 <, >는 >, &는 &, "는 ", '는 '가 됩니다. 16진수와 10진수는 같은 유니코드 코드 포인트를 가리키므로 서로 바꿔 쓸 수 있지만, 16진수는 유니코드 표준의 U+XXXX 표기와 일대일로 대응되어 특정 코드 포인트를 문서화하거나 따질 때 많은 개발자가 선호하는 형식입니다.

모든 비ASCII 문자 인코딩

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

"모든 비ASCII 문자 인코딩"을 켜면 0x7F를 초과하는 모든 코드 포인트가 예약된 다섯 문자뿐 아니라 엔티티로 변환됩니다. café의 é는 선택한 형식에 따라 이름 é, 10진수 é, 16진수 é가 되며 셋 모두 같은 문자 U+00E9를 가리킵니다. 이 모드는 비유니코드 문자셋으로 제공되는 페이지나 원시 UTF-8을 망가뜨리는 시스템을 위한 것으로, 모든 것을 7비트 안전 ASCII 엔티티로 강제하여 텍스트가 전송 중 손상 없이 보존되도록 합니다.

HTML 엔티티 인코더 사용법

  1. 1

    HTML 또는 텍스트 붙여넣기

    이스케이프할 마크업이나 일반 텍스트를 입력 상자에 넣으세요. 인코딩된 출력은 입력하는 대로 실시간 갱신됩니다. 제출 버튼도 없고 어디로도 전송되지 않습니다.

  2. 2

    엔티티 형식 선택

    이름이 읽기 쉬운 기본값입니다(<, &, ©). 사용하는 시스템이 숫자 참조를 선호하거나 이름 엔티티 지원을 보장할 수 없으면 10진수(<)나 16진수(<)로 전환하세요.

  3. 3

    필요하면 모든 비ASCII 인코딩

    최신 UTF-8 페이지에서는 이 옵션을 꺼서 악센트와 이모지가 읽기 쉬운 원시 문자로 남게 하세요. 텍스트가 레거시 단일 바이트 문자셋을 거쳐야 할 때만 켜세요. 그러면 0x7F를 초과하는 모든 문자가 ASCII 안전 엔티티로 변환됩니다.

  4. 4

    인코딩된 결과 복사

    복사를 클릭하면 이스케이프된 문자열이 클립보드에 담겨 템플릿, 문서 페이지, 데이터베이스 필드에 붙여넣을 준비가 됩니다. 지우기는 다음 조각을 위해 양쪽 창을 초기화합니다.

  5. 5

    역방향이 필요하면 방향 전환

    엔티티를 다시 해당 문자로 바꾸고 싶을 때 방향 전환으로 HTML 엔티티 디코더로 이동하세요.

흔한 HTML 인코딩 실수

앰퍼샌드를 마지막에 이스케이프해 이중 이스케이프 발생

& 전에 <와 >를 치환하면 방금 만든 엔티티의 &가 다시 이스케이프되어 <가 &lt;가 되고 글자 그대로 렌더링됩니다. 항상 &를 먼저 이스케이프하세요.

✗ 오류
replace < and > first, then &  →  &lt;  becomes  &amp;lt;
✓ 정상
escape & first, then the rest  →  &lt;  stays  &lt;

레거시 문맥에서 아포스트로피에 ' 사용

'는 HTML4에 정의되어 있지 않고 일부 이메일 클라이언트는 이를 글자 그대로 보여줍니다. 오래되거나 혼합된 환경을 대상으로 할 때는 모든 파서가 이해하는 숫자 ' 또는 '를 쓰세요.

✗ 오류
It&apos;s here  →  may render as  It&apos;s here
✓ 정상
It&#x27;s here  →  renders as  It's here

데이터를 두 번 인코딩함

이미 이스케이프된 텍스트를 인코더에 다시 통과시키면 이중 인코딩됩니다. &가 &amp;가 되어 사용자에게 & 대신 &가 보입니다. 출력 시점에 정확히 한 번만 이스케이프하세요.

✗ 오류
&amp;  encoded again  →  &amp;amp;  shows as  &amp;
✓ 정상
&amp;  left as-is  →  renders as  &

URL이나 자바스크립트 문맥에 HTML 이스케이프 사용

HTML 엔티티는 URL이나 인라인 스크립트 안에서 값을 안전하게 만들지 못합니다. URL의 공백은 %20이 필요하고, 자바스크립트의 문자열은 JS/JSON 이스케이프가 필요합니다. 값이 도달하는 곳에 인코딩을 맞추세요.

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

UTF-8 페이지에서 불필요하게 비ASCII 인코딩

최신 UTF-8 페이지에서 café를 café로 강제하면 소스가 부풀고 가독성이 떨어질 뿐 이득이 없습니다. 레거시 문자셋이 진짜로 엔티티를 요구하지 않는 한 비ASCII는 원시 상태로 두세요.

✗ 오류
caf&eacute; on a UTF-8 page  →  needless, harder to read
✓ 정상
café on a UTF-8 page  →  valid and clean

속성 값 안의 따옴표 이스케이프를 잊음

이스케이프하지 않은 "를 속성에 넣으면 값이 빠져나와 새 속성을 주입할 수 있습니다. XSS 벡터입니다. 속성 문맥에서는 항상 "(이상적으로는 '도) 이스케이프하세요. 이 도구는 기본적으로 그렇게 합니다.

✗ 오류
title="He said "hi""  →  attribute breaks out
✓ 정상
title="He said &quot;hi&quot;"  →  contained

누가 이 도구를 사용하나

웹 페이지에 코드 샘플 표시
글자 그대로의 HTML을 보여줘야 하는 튜토리얼이나 문서를 작성하시나요? 조각을 이스케이프해 <strong>bold</strong>가 렌더링되지 않고 텍스트로 나타나게 하세요. 마크업을 붙여넣고 이스케이프된 출력을 복사해 <pre>나 <code> 블록에 넣으세요.
XSS에 대비해 사용자 입력 정화
사용자가 제공한 문자열을 HTML에 삽입하기 전에 예약된 다섯 문자를 이스케이프해, <script>…</script> 같은 페이로드가 무력한 텍스트가 되게 하세요. 이것이 마크업을 직접 만들 때 교차 사이트 스크립팅에 대한 기초 방어입니다.
데이터베이스 필드나 JSON에 마크업 저장
HTML 조각을 다운스트림에서 해석되지 않는 일반 문자열로 저장해야 하나요? 먼저 인코딩해 꺾쇠괄호와 앰퍼샌드가 저장과 재표시를 온전히 견디게 한 다음, 꺼낼 때 디코딩하세요.
이메일 템플릿과 CMS 콘텐츠 작성
이메일 클라이언트와 콘텐츠 관리 시스템은 원시 특수문자에 까다롭습니다. 예약 집합을(필요하면 모든 비ASCII까지) 이스케이프해, 문자셋이 다를 수 있는 클라이언트에서도 템플릿이 일관되게 렌더링되게 하세요.
레거시 문자셋을 위한 텍스트 변환
원시 UTF-8을 다루지 못하는 시스템을 대상으로 하나요? "모든 비ASCII 인코딩"을 켜서 모든 악센트 문자, 기호, 이모지를 ASCII 안전 엔티티로 다시 써, 7비트 클린 파이프라인을 통과해도 텍스트가 보존되게 하세요.
XML 및 SVG 속성 값 이스케이프
XML과 인라인 SVG는 HTML의 예약 문자를 공유합니다. 따옴표와 꺾쇠괄호를 인코딩해, 마크업이 박힌 문자열이 문서 구조를 깨뜨리지 않고 속성 값에 안전하게 들어가게 하세요.
엔티티 빠르게 찾아보기
상표 기호가 ™인지 ™인지 잊으셨나요? 문자를 입력하고 출력에서 이름·10진수·16진수 엔티티를 읽거나, 페이지를 벗어나지 않고 내장 빠른 참조 표를 보세요.

인코더 작동 원리

특수문자 모드(기본)
기본적으로 HTML 예약 문자 다섯 개(& < > " ')만 안전한 출력을 위한 WHATWG HTML 직렬화 규칙에 따라 이스케이프됩니다. 다른 문자에 생성된 엔티티가 이중 이스케이프되지 않도록 &가 먼저 치환됩니다. 비ASCII를 포함한 나머지 모든 문자는 그대로 통과합니다.
아포스트로피는 ' 사용
HTML4에 정의되어 있지 않고 일부 레거시 파서에서 안전하지 않은 이름 엔티티 ' 대신, 작은따옴표는 U+0027을 가리키는 숫자 '(10진수 ')로 출력됩니다. 이는 he 같은 잘 검증된 라이브러리의 관례와 일치하며 HTML4, HTML5, XML 모두에서 출력이 안전하도록 보장합니다.
이름·10진수·16진수 인코딩
형식 선택기가 각 이스케이프된 문자의 작성 방식을 제어합니다. 이름은 정의된 라벨이 있는 곳에 사용하고(<, ©), 10진수는 유니코드 코드 포인트를 10진법으로(<), 16진수는 16진법으로(<) 씁니다. 숫자 형태는 이름 형태와 같은 코드 포인트를 가리키며 파싱되면 서로 바꿔 쓸 수 있습니다.
모든 비ASCII 인코딩 옵션
켜면 코드 포인트가 0x7F를 초과하는 모든 문자가 선택한 형식의 엔티티로 변환됩니다. café는 café(이름), café(10진수), café(16진수)가 됩니다. 이모지 같은 아스트랄 문자는 전체 코드 포인트로 인코딩됩니다(😀 → 😀). 이렇게 레거시 전송을 위한 7비트 클린 ASCII 출력이 생성됩니다.
문자셋과 엔티티의 차이
문자셋은 텍스트가 바이트로 저장되는 방식을 정의하고, 엔티티는 ASCII만으로 문자를 쓰는 방법입니다. UTF-8 페이지에서는 비ASCII 문자에 엔티티가 필요 없으므로 기본값이 이들을 원시 상태로 둡니다. 모든 것을 인코딩하는 것은 출력이 비유니코드 문자셋이나 UTF-8에 적대적인 시스템을 거쳐야 할 때만 필요합니다.
브라우저 로컬, 네트워크 제로
인코딩은 메인 스레드에서 자바스크립트로 동기 실행됩니다. API 호출도, 서버로의 워커 왕복도, 영속 저장도 없습니다. 입력은 페이지를 벗어나지 않으며, 입력하는 동안 비어 있는 네트워크 패널을 지켜보면 확인할 수 있습니다.

HTML 이스케이프 모범 사례

올바른 문맥에서, 출력 시점에 이스케이프
데이터를 받을 때가 아니라 HTML에 삽입하는 순간 인코딩하고, 인코딩을 문맥에 맞추세요. HTML 엔티티 인코딩은 HTML 요소·속성 콘텐츠용입니다. URL 안에서는 URL 인코딩을, 스크립트 블록 안에서는 자바스크립트/JSON 이스케이프를 쓰세요. 잘못된 문맥에서 이스케이프하면 구멍이 남습니다.
신뢰할 수 없는 입력은 항상 이스케이프
사용자, 업로드, 외부 API에서 비롯된 모든 문자열은 마크업에 들어가기 전에 이스케이프해야 합니다. 이것이 핵심 XSS 방어입니다. 꺾쇠괄호가 엔티티가 되면 <script>alert(1)</script> 같은 페이로드가 무력한 텍스트가 됩니다.
내장 이스케이프가 있으면 우선 사용
React, Vue, 대부분의 서버 템플릿 엔진은 보간된 텍스트를 자동으로 이스케이프하며, element.textContent를 설정하는 것도 이스케이프해 줍니다. 이 도구는 일회성 변환과 출력 이해에 쓰고, 애플리케이션 코드에서는 직접 만들기보다 프레임워크의 자동 이스케이프에 의존하세요.
UTF-8 페이지에서는 비ASCII를 원시 상태로
페이지가 <meta charset="utf-8">를 선언했다면 악센트와 이모지를 엔티티로 인코딩하지 마세요. 원시 UTF-8이 더 짧고 읽기 쉬우며 똑같이 올바릅니다. "모든 비ASCII 인코딩"은 실제로 필요한 진짜 레거시 문자셋 경우에만 남겨 두세요.
혼합 문맥에서는 숫자 아포스트로피 사용
출력이 오래된 파서, XML 프로세서, 이메일 클라이언트에 소비될 수 있다면 작은따옴표에 이름 '보다 숫자 '를 선호하세요. 숫자 형태는 어디서나 이해되지만 이름 형태는 그렇지 않으며, 렌더링된 텍스트에 글자 그대로 "'"가 남는 것은 흔하면서도 피할 수 있는 버그입니다.

자주 묻는 질문

인코딩할 때 내 텍스트가 서버로 전송되나요?
아니요. 모든 문자는 자바스크립트로 브라우저 안에서 전부 인코딩됩니다. DevTools → 네트워크를 열어 보면 입력하거나 붙여넣을 때 요청이 전혀 발생하지 않습니다. 아무것도 업로드되지 않고, 기록되지 않으며, 디스크에 저장되지 않습니다. 사람들이 이스케이프하는 마크업은 비공개 CMS의 조각, 내부 이메일 템플릿, 고객 지원 답변, 아직 게시하지 않은 초안처럼 민감한 경우가 많기 때문에 이 프라이버시가 중요합니다. 서버 측 인코더에서는 그 모두가 사용자가 통제하지 못하는 기계로 네트워크를 거쳐 전송되지만, 여기서는 텍스트가 탭을 벗어나지 않습니다. 처리하는 모든 것을 복사해 둘 수도 있는 웹사이트에 붙여넣는 대신 클라이언트 측에서 HTML을 이스케이프하는 이유가 바로 이것입니다.
HTML을 이스케이프한다는 것은 무엇이고 왜 하나요?
HTML을 이스케이프한다는 것은 브라우저가 마크업으로 해석할 문자를 그에 대응하는 엔티티로 바꿔, 글자 그대로 표시되게 하는 것입니다. 대표적인 경우는 페이지에 코드를 보여주는 것입니다. 방문자가 "bold"라는 단어가 굵게 렌더링된 모습이 아니라 문자열 <strong>bold</strong>를 읽게 하려면 꺾쇠괄호를 <strong>bold</strong>로 이스케이프합니다. 더 중요한 또 다른 경우는 보안입니다. 신뢰할 수 없는 사용자 입력을 페이지에 삽입할 때 예약된 다섯 문자(< > & " ')를 이스케이프하면 그 입력이 문맥을 벗어나 <script> 태그를 주입하는 것을 막을 수 있습니다. 이는 교차 사이트 스크립팅(XSS)에 대한 핵심 방어입니다. 사용자에게서 비롯되어 HTML에 들어가는 모든 텍스트는 먼저 이스케이프해야 합니다.
이름·10진수·16진수 엔티티의 차이는 무엇인가요?
셋 모두 같은 문자를 만들며, 참조를 쓰는 방식만 다릅니다. 이름 엔티티는 사람이 읽기 쉬운 라벨을 사용합니다. <는 <, &는 &, ©는 ©처럼요. 읽기 쉽지만 정의된 이름이 있는 문자에만 쓸 수 있습니다. 10진수 숫자 엔티티는 유니코드 코드 포인트를 10진법으로 씁니다. <는 <, é는 é처럼요. 16진수 엔티티는 같은 코드 포인트를 16진법으로 쓰며 <는 <, é는 é로, 유니코드 표준의 U+XXXX 표기를 반영합니다. 이름 엔티티는 가장 읽기 쉬워 흔한 예약 문자의 기본값으로 적합하고, 숫자 엔티티(10진수 또는 16진수)는 이름이 없는 것을 포함해 어떤 코드 포인트든 인코딩할 수 있어 특정 이름 엔티티의 지원을 보장할 수 없을 때 안전한 선택입니다.
아포스트로피는 왜 '가 아니라 '로 인코딩되나요?
'가 모든 곳에서 안전하지는 않기 때문입니다. 이름 엔티티 '는 HTML5와 XML에서만 도입되었고 HTML4에는 정의되어 있지 않아, 일부 오래된 파서와 이메일 클라이언트는 이를 아포스트로피가 아니라 글자 그대로 "'"로 렌더링합니다. 숫자 참조 '(또는 10진수 짝인 ')는 정확히 같은 문자 U+0027을 가리키며 지금까지 작성된 모든 규격 파서가 이해합니다. 이 도구는 he 같은 잘 검증된 라이브러리의 동작을 따라 아포스트로피에 어디서나 호환되는 '를 출력하므로, 출력 결과를 어떤 HTML·XML·속성 문맥에 넣어도 문제가 없습니다.
é, — 또는 😀 같은 비ASCII 문자를 인코딩해야 하나요?
대개는 아닙니다. 페이지가 <meta charset="utf-8">를 선언했다면(사실상 모든 최신 페이지가 그렇습니다) 악센트 문자, 엠 대시, 이모지는 원시 UTF-8로 완전히 유효하며 인코딩이 전혀 필요 없습니다. 그래서 기본 "특수문자" 모드는 이들을 건드리지 않아 출력을 짧고 읽기 쉽게 유지합니다. 비ASCII 문자는 텍스트가 레거시 단일 바이트 문자셋으로 제공·저장되거나 원시 UTF-8을 손상시키는 시스템을 거칠 때만 인코딩하면 됩니다. 그런 경우 "모든 비ASCII 문자 인코딩"을 켜면 0x7F를 초과하는 모든 코드 포인트가 ASCII 안전 엔티티로 변환됩니다. 확실하지 않다면 기본값을 유지하고 문자셋 선언이 올바른지 확인하세요.
HTML 이스케이프가 XSS 공격으로부터 나를 보호하나요?
이스케이프는 XSS 방어의 토대이지만 문맥에 따라 달라지므로 솔직한 답은 "올바르게 적용하면 그렇다"입니다. 신뢰할 수 없는 입력을 HTML 요소 내용에 넣기 전에 예약된 다섯 문자를 인코딩하면 공격자가 태그나 스크립트를 주입하는 것을 확실히 막아, <script>alert(1)</script> 같은 페이로드가 무력한 텍스트가 됩니다. 다만 HTML에는 각자 이스케이프 규칙이 다른 여러 문맥이 있습니다. 속성 값 안에서는 따옴표를 이스케이프해야 하고(이 도구가 처리합니다), <script> 블록이나 인라인 이벤트 핸들러 안에서는 자바스크립트 이스케이프가 필요하며, URL 안에서는 URL 인코딩이 필요합니다. HTML과 속성 문맥에는 HTML 엔티티 인코딩을 쓰고, URL에는 URL 인코더 / 디코더를, 자바스크립트나 JSON에 문자열을 넣을 때는 JSON 이스케이프 도구를 사용하세요. 데이터가 도달하는 문맥에서, 출력 시점에 인코딩하세요.
이걸 되돌려서 엔티티를 다시 문자로 바꾸려면 어떻게 하나요?
함께 제공되는 HTML 엔티티 디코더를 사용하세요. <div> & © 같은 엔티티로 가득한 문자열을 받아 실제 문자 <div> & ©로 되돌리며, 이름 엔티티, 10진수 참조, 16진수 참조는 물론 세미콜론이 빠진 &copy 같은 레거시 엔티티까지 처리합니다. 인코딩과 디코딩은 예약 문자에 대해 정확한 역연산이므로 두 도구를 거쳐 손실 없이 왕복할 수 있습니다. 페이지가 < 대신 글자 그대로 &lt;를 보여주는 이유를 디버깅한다면, 엔티티가 실제로 무엇으로 해석되는지 가장 빠르게 확인하는 방법이 디코더입니다.
인코딩이 보이는 텍스트를 바꾸거나 레이아웃을 망가뜨리나요?
아니요. 바로 그것이 핵심입니다. 엔티티는 문자의 또 다른 표기일 뿐입니다. 브라우저가 <를 파싱하면 원시 문자와 동일한 하나의 < 글리프로 렌더링합니다. 따라서 올바르게 이스케이프된 페이지는 방문자에게 원시 문자를 쓴 것과 똑같이 보이며, 차이는 브라우저가 이스케이프된 버전을 마크업이 아니라 텍스트로 취급한다는 것뿐입니다. 이스케이프가 바꾸는 단 하나는 소스 문자열의 길이와 외형이므로, 이스케이프가 필요한 것만 이스케이프하는 것입니다. 어수선한 마크업을 정리하고 들여쓰기하는 것이 목적이라면 그것은 다른 작업입니다. HTML 포매터를 사용하세요.

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 엔티티를 디코딩하고 HTML을 언이스케이프하세요. 무료, 가입 불필요, 100% 브라우저에서 처리. 이름·10진수·16진수 참조를 문자로 되돌리며 업로드 없음.

HTML to Markdown 변환기

인코딩 & 포매팅

브라우저에서 HTML을 깔끔한 Markdown으로 변환 — GFM 테이블·작업 목록·링크, ATX/Setext와 인라인·참조 링크 선택. 웹 이전·LLM 입력에 적합. 100% 비공개.