HTML Entity Encoder & Decoder
특수문자를 HTML entity로 인코딩하거나 entity를 일반 텍스트로 디코딩하세요. Named, decimal, hex 형식 중 선택할 수 있어요. 모든 처리가 브라우저에서 진행되므로 서버로 데이터가 전송되지 않습니다.
작동 방식: 텍스트를 붙여넣거나 입력한 후 인코드 또는 디코드 모드를 선택하고 entity 형식을 고르세요. 출력이 즉시 업데이트돼요. 가독성을 위해서는 named entities를, 최대 호환성을 위해서는 decimal 또는 hex를 사용하세요. 데이터는 브라우저를 벗어나지 않습니다.
&&&Ampersand<<<Less than>>>Greater than"""Double quote'''Single quote   Non-breaking space©©©Copyright®®®Registered™™™Trademark———Em dash€€€EuroHTML Entities란 무엇인가요?
HTML entities는 HTML에서 예약된 의미를 가지거나 소스 코드에 직접 입력할 수 없는 문자를 표현하기 위한 특수 시퀀스예요. 가장 중요한 예는 ampersand(&)인데, 모든 entity의 시작을 나타내므로 리터럴 텍스트로 나타날 때는 &로 작성해야 합니다. 마찬가지로 less-than 기호(<)는 HTML 태그 시작으로 잘못 해석되는 것을 방지하기 위해 <로 작성해야 해요. Entity는 세 가지 형식을 따릅니다: named(&), decimal(&), hexadecimal(&). 셋 다 같은 문자를 나타내며, 선택은 가독성 선호도와 대상 파서 호환성에 따라 달라집니다.
왜 HTML 문자를 인코딩해야 할까요?
HTML 문자 인코딩은 두 가지 이유로 필수적이에요: 정확성과 보안입니다. 정확성 측면에서 <, >, & 같은 문자는 HTML 구문의 일부거든요. 이들이 이스케이프되지 않은 상태로 텍스트 내용에 나타나면 브라우저가 마크업으로 잘못 해석해서 페이지 레이아웃이 깨질 수 있어요. 보안 측면에서는 사용자가 제공한 입력을 HTML에 렌더링하기 전에 인코딩하지 않으면 Cross-Site Scripting(XSS) 공격의 원인이 됩니다. 이는 가장 흔한 웹 취약점 중 하나에요. 공격자는 폼 필드나 URL 매개변수를 통해 <script> 태그를 주입할 수 있고, 서버가 그 입력을 인코딩하지 않고 렌더링하면 악성 스크립트가 모든 방문자의 브라우저에서 실행돼요. 항상 출력을 인코딩하고 원본 입력을 신뢰하지 마세요.
Named vs Decimal vs Hex Entities
©, €, —처럼 named entities는 인간이 읽을 수 있고 모든 최신 브라우저에서 광범위하게 지원돼요. Decimal entities는 Unicode code point를 10진법으로 사용하고(©는 ©), hexadecimal entities는 16진법을 사용합니다(같은 문자는 ©). Named entities는 정의된 Unicode 문자 부분집합에만 존재하므로 그 외의 것은 decimal 또는 hex를 사용해야 해요. Hex 표기법은 Unicode 문서와 자연스럽게 맞아떨어져요(예: U+0026는 &로 매핑됨). HTML attributes에서는 항상 double quotes를 " 또는 "로 인코딩해서 attribute injection을 방지하세요.
HTML Entity 모범 사례
- XSS 공격을 방지하려면 HTML에 렌더링하기 전에 항상 사용자 입력을 인코딩하세요
- 다른 문자를 인코딩하기 전에 &를 &로 먼저 인코딩해서 double-encoding을 피하세요
- ©, ®, ™ 같은 일반적인 기호는 named entities로 사용해서 가독성을 높이세요
- U+007F 이상의 모든 Unicode 문자는 legacy parsers를 대상으로 할 때 decimal 또는 hex entities를 사용하세요
- HTML attributes 내에서 quotes("과 ')를 모두 인코딩해서 attribute 손상을 방지하세요
- 최대 호환성을 위해 "모두 인코드"를 활성화해서 모든 non-ASCII 문자를 강제로 인코딩하세요
- 텍스트 로직을 처리하기 전에 entities를 디코딩하세요. 원본 entity 문자열로 작업하지 마세요
- (non-breaking space)는 원치 않는 줄바꿈을 방지하지만 대량으로 일반 공백을 대체해서는 안 됩니다