인터페이스 디버깅 시 HTML 엔티티 인코딩/디코딩 결과가 잘못 나오면 어떻게 해야 하나요
인터페이스 디버깅 중 HTML 엔티티 인코딩/디코딩 결과가 잘못 나오는 경우, 보통 도구가 고장 난 것이 아니라 입력 유형, 이스케이프 계층 또는 문자 집합을 잘못 파악한 것입니다. 먼저 원본 데이터가 HTML 엔티티인지, URL 인코딩인지, JSON 이스케이프인지 확인한 후 해당하는 디코딩 방식을 선택하면 결과가 거의 맞아떨어집니다.
인터페이스 응답에 &, ', < 같은 조각이 나타날 때 많은 사람이 바로 도구에 붙여넣어 디코딩하려고 합니다. 하지만 이 내용 자체가 이미 한 번 이스케이프된 상태라면 다시 디코딩할 경우 잘못된 결과가 나옵니다. 아래에서는 점검 순서에 따라 어떻게 위치를 파악하고 수정하는지 설명합니다.
먼저 데이터가 어떤 인코딩인지 판단하세요
HTML 엔티티는 &name; 또는 &#숫자; 형태의 자리 표시자로, 브라우저가 렌더링할 때만 문자로 복원됩니다. 이는 URL 인코딩(%20), JSON 문자열 이스케이프(\", \u4e2d)와는 다른 계층의 개념입니다. 유형을 잘못 판단하면 디코딩 결과도 당연히 틀립니다.
다음 순서로 확인할 수 있습니다:
- 문자 형태 확인:
&...;가 있으면 HTML 엔티티,%와 두 자리 16진수가 있으면 URL 인코딩, 백슬래시가 있으면 JSON 또는 프로그래밍 언어 이스케이프입니다. - 이스케이프 계층 수 세기:
&amp;가 연속으로 나타나면 두 번 이스케이프된 것이므로 두 번 디코딩해야&로 복원됩니다. - 문자 집합 확인: 인터페이스가 UTF-8을 선언했지만 실제로는 GBK를 반환하는 경우, 디코딩 후 물음표나 네모가 나타납니다.
- 이중 래핑 여부 확인: 일부 인터페이스는 HTML 조각을 JSON 필드에 넣으므로, 먼저 JSON을 디코딩한 후 엔티티를 디코딩해야 합니다.
브라우저에서 로컬로 실행되는 HTML 엔티티 인코딩/디코딩 도구는 데이터를 업로드하지 않으므로, 인터페이스 응답 조각을 붙여넣어 대조 테스트하기에 적합합니다.
HTML 엔티티 인코딩/디코딩과 문자 이스케이프의 차이
HTML 엔티티 인코딩/디코딩과 문자 이스케이프의 차이는 적용 범위에 있습니다. 엔티티 인코딩/디코딩은 HTML 문서 내의 &...; 자리 표시자를 처리하고, 문자 이스케이프는 언어 또는 전송 계층에서 문자열의 특수 문자 표현을 처리합니다. 둘 다 모호성을 피하는 것이 목적이지만 계층이 다릅니다.
HTML 엔티티 인코딩/디코딩과 문자 이스케이프의 차이는 가역성에서도 나타납니다. 엔티티 인코딩/디코딩은 보통 일대일 매핑이며, <는 `