it-box

HTML 엔티티 이스케이프

HTML 엔티티를 이스케이프하거나 원래 문자로 되돌립니다. (<, >, &, 따옴표 등)

HTML 엔티티 이스케이프 도구 열기

문자열의 HTML 특수문자(&, <, >, 큰따옴표, 작은따옴표)를 엔티티로 바꾸거나, 엔티티를 원래 문자로 되돌립니다. lodash의 escape와 unescape를 사용합니다.

사용 순서

  1. Escape 카드의 입력란에 HTML 조각을 넣습니다. 아래 칸에 이스케이프된 문자열이 나옵니다.
  2. Copy 버튼으로 결과를 복사합니다.
  3. Unescape 카드에 &lt; 같은 엔티티가 들어 있는 문자열을 넣습니다.
  4. 아래 칸에서 원래 문자열을 확인합니다.

예시

<title>IT Tool</title> 을 이스케이프하면 &lt;title&gt;IT Tool&lt;/title&gt; 가 나오고, 그 결과를 Unescape에 넣으면 원래 문자열로 돌아옵니다.

한계

escape는 & < > " ' 다섯 문자만 바꾸고 슬래시(/)는 그대로 둡니다. unescape는 &amp; &lt; &gt; &quot; &#39; 다섯 가지만 복원하므로 &nbsp;나 &#x41; 같은 엔티티는 그대로 남습니다. 임의의 이름 있는 엔티티나 숫자 참조를 처리해야 한다면 다른 도구가 필요합니다.

보안 주의

unescape 결과는 살아 있는 HTML 마크업이 됩니다. 예를 들어 &lt;img src=x onerror=...&gt; 같은 입력을 풀어서 innerHTML에 넣으면 스크립트가 실행될 수 있습니다. 결과는 텍스트로만 쓰고 HTML로 삽입하지 마세요.

배경 지식

HTML에서 <와 &는 태그와 엔티티의 시작 기호이므로, 화면에 글자로 보이게 하려면 엔티티 형태로 바꿔야 합니다. &lt;는 <, &amp;는 &, &quot;는 큰따옴표를 뜻합니다. 템플릿에 사용자 입력을 넣을 때 이 이스케이프가 빠지면 입력이 태그로 해석되어 XSS 취약점이 생깁니다. 반대로 이미 이스케이프된 값을 또 이스케이프하면 &amp;lt;처럼 엔티티 문자열이 화면에 그대로 보입니다.

HTML에는 이름 있는 엔티티가 2000개가 넘게 정의되어 있지만, 이 도구는 기본 다섯 가지만 다룹니다. 그래서 escape와 unescape는 대칭이 아닙니다. 예를 들어 &nbsp;는 unescape 후에도 남습니다. 텍스트 편집기나 API 응답을 다룰 때는 실제로 어떤 엔티티가 들어오는지 먼저 확인하고, 그 범위에 맞는 도구를 고르는 것이 좋습니다.

자주 묻는 질문

작은따옴표는 &#39;로 바꾸나요, &apos;로 바꾸나요?

이 도구는 &#39;을 씁니다. &apos;는 HTML5에서 정의된 이름 있는 엔티티이지만 HTML 4에는 없어서 오래된 환경에서 해석되지 않을 수 있습니다. &#39;는 어디서나 해석되므로 호환성 측면에서 안전합니다.

이스케이프한 문자열을 JSON에 넣어도 되나요?

JSON 문자열 안에서는 &, <, > 가 특별한 의미를 갖지 않으므로 이스케이프할 필요가 없습니다. JSON을 HTML 속성이나 script 블록 안에 넣을 때만 이 도구의 결과가 필요합니다.

입력에 이미 엔티티가 있으면 escape 결과는 어떻게 되나요?

& 기호가 &amp;로 바뀌므로 &lt;는 &amp;lt;가 됩니다. 이미 인코딩된 입력을 두 번 처리하면 화면에 엔티티 문자열이 그대로 보이므로, 입력이 원문인지 먼저 확인하세요.