·4분 읽기

맥용 문자열 이스케이프 및 언이스케이프 — JSON, HTML, URL

한 문자열 형식을 다른 형식 안에 삽입하려면 따옴표, 슬래시, 특수 문자를 올바르게 이스케이프해야 합니다. 그렇지 않으면 파서가 오류를 내며 멈춥니다.

JSON 문자열 하나를 다른 JSON 문자열 안에 삽입해야 합니다 — 이를테면 그 자체로 JSON 페이로드를 담고 있는 로그 메시지 같은 경우입니다. 아니면 인용부호가 포함된 문자열을 담은 셸 명령어를 작성하고 있습니다. 또는 다른 URL을 쿼리 파라미터로 담아야 하는 URL을 만들고 있습니다. 이런 상황들은 모두 이스케이프를 요구합니다: 그렇지 않으면 구문으로 해석될 문자를 리터럴 데이터로 취급되는 형태로 바꾸는 작업입니다.

맥락마다 이스케이프 방식이 다릅니다. JSON은 백슬래시로 따옴표를 이스케이프하고 줄바꿈 같은 특수 문자를 \n으로 표현합니다. 셸 이스케이프는 어떤 인용 스타일을 쓰는지에 따라 다릅니다. URL 이스케이프는 예약된 문자를 앞의 두 방식과는 완전히 다르게 퍼센트 인코딩합니다. 이를 혼동해서 URL 이스케이프가 필요한 곳에 JSON 이스케이프를 적용하면 거의 맞는 것처럼 보이지만 헷갈리는 방식으로 실패하는 결과물이 나옵니다.

이중 이스케이프 문제

이 분야에서 가장 흔한 버그 중 하나는 이중 이스케이프입니다: 문자열이 코드에서 한 번 이스케이프되고, 여전히 원시 상태라고 가정하는 라이브러리나 프레임워크에서 또 한 번 이스케이프되면서 백슬래시 하나가 두 개로 바뀌고 데이터가 조용히 손상됩니다. 이를 진단하려면 정확히 어디서 추가 계층이 들어갔는지 확인하기 위해 단계별로 언이스케이프해야 합니다 — 특히 긴 문자열에서 손으로 하기에는 지루한 작업입니다.

여러 형식에 대해 이스케이프 및 언이스케이프하기

Bellows는 41가지 개발자 도구 중 하나로 JSON, HTML, URL 형식을 다루는 문자열 이스케이프 도구를 포함합니다. 원시 문자열을 붙여넣으면 특정 맥락에 맞게 올바르게 이스케이프된 결과를 볼 수 있고, 이스케이프된 문자열을 붙여넣으면 원래의 원시 값을 볼 수 있습니다.

Bellows string escape and unescape tool on macOS

문자열 안에 문자열 삽입하기

그 자체로 JSON 문자열을 필드 값으로 담고 있는 JSON 페이로드를 만들거나, 임의의 사용자 입력을 안전하게 포함해야 하는 로그 메시지를 구성하는 것 모두 외부 구조를 손상시키지 않으려면 올바른 이스케이프가 필요합니다.

이중으로 이스케이프된 데이터 진단하기

문자열이 필요 이상으로 여러 번 이스케이프된 것처럼 보일 때, 이를 층별로 언이스케이프하면 추가 인코딩이 정확히 어디서 들어갔는지 드러나며, 이는 보통 원인이 된 코드를 추적하는 가장 빠른 방법입니다.

Mac App Store에서 Bellows 받기

다음 기사

Bellows

41 developer tools in one native Mac app — JSON, JWT, Base64, hashes, and more.

Get Bellows on the Mac App Store