%

URL 인코딩 디코딩 percent

URL에 넣을 수 없는 공백, 한글, 특수문자를 percent-encoding으로 변환하거나 원래 문자열로 되돌립니다.

mode
scope
INPUTraw text
0 lines 0 chars
1
OUTPUTencoded
0 lines 0 chars
1
scope: component
도구 설명

이 도구가 하는 일

URL에는 사용할 수 있는 문자가 정해져 있습니다. 영문자, 숫자, 그리고 -_.~ 정도만 그대로 쓸 수 있고 나머지는 인코딩해야 합니다. 공백, 한글, 그리고 &, =, ?, # 처럼 URL 구조에서 의미를 가지는 기호가 값 안에 들어가면 주소가 잘못 해석되기 때문입니다.

percent-encoding은 이런 문자를 바이트 단위로 쪼갠 뒤 각 바이트를 % 와 16진수 두 자리로 표현합니다. 예를 들어 공백은 %20이 되고, 한글 한 글자는 UTF-8에서 3바이트이므로 %EA%B2%80처럼 세 덩어리로 표현됩니다. 이렇게 하면 어떤 문자든 URL에 안전하게 담을 수 있습니다.

주의할 점은 인코딩 방식이 한 가지가 아니라는 것입니다. 공백을 %20으로 바꾸는 방식(RFC 3986, JavaScript의 encodeURIComponent)과 + 로 바꾸는 방식(HTML 폼 전송에 쓰이는 application/x-www-form-urlencoded)이 함께 쓰입니다. 쿼리스트링을 다룰 때는 두 방식이 섞이면서 값이 깨지는 일이 자주 생기므로, 지금 다루는 값이 어느 규칙을 따르는지 확인해야 합니다.

언제 사용하나요

검색어나 한글이 포함된 링크를 만들 때, API 요청의 쿼리 파라미터에 특수문자가 들어간 값을 넣을 때, 리다이렉트 주소를 다른 URL의 파라미터로 전달할 때, 로그나 브라우저 주소창에서 복사한 %EA%B2%80 같은 문자열이 실제로 무엇인지 확인할 때 사용합니다. 외부 서비스 연동 문서에 나온 인코딩된 예시를 읽을 때도 유용합니다.

입력과 출력 예시

입력 검색어 test
출력 %EA%B2%80%EC%83%89%EC%96%B4%20test

한글 3글자가 각각 3바이트씩 9개의 % 조각이 되고, 공백은 %20이 됩니다.

입력 a+b c&d=e
출력 a%2Bb%20c%26d%3De

+, &, = 처럼 URL에서 의미를 갖는 기호가 값 안에 있으면 반드시 인코딩해야 파라미터가 분리되지 않습니다.

입력 %ED%95%9C%EA%B8%80
출력 한글

디코딩 방향. 주소창이나 로그에서 복사한 값을 읽을 때 사용합니다.

주의사항

URL 전체를 한 번에 인코딩하면 안 됩니다. https:// 의 슬래시나 쿼리의 & 까지 인코딩되어 주소가 망가집니다. 인코딩은 파라미터 값 하나하나에만 적용해야 합니다. 또한 이미 인코딩된 문자열을 다시 인코딩하면 % 기호 자체가 %25로 바뀌어 이중 인코딩 문제가 생깁니다. 값이 이상하게 길어졌다면 이 경우를 의심해 보십시오. 공백이 + 로 되어 있는 값을 %20 방식으로 디코딩하면 + 가 그대로 남으므로 원본이 어느 방식인지 확인이 필요합니다.

자주 묻는 질문

공백이 %20이 될 때와 + 가 될 때는 어떻게 다른가요?

URL 경로나 일반적인 쿼리 인코딩(RFC 3986)에서는 %20을 사용하고, HTML 폼이 전송하는 application/x-www-form-urlencoded 형식에서는 + 를 사용합니다. 서버가 어느 방식으로 파싱하는지에 따라 결과가 달라지므로 API 문서를 확인하는 것이 좋습니다.

왜 한글 한 글자가 %XX 세 개로 바뀌나요?

percent-encoding은 문자가 아니라 바이트를 인코딩하기 때문입니다. 한글은 UTF-8에서 대부분 3바이트를 차지하므로 %XX 형태가 세 개 나옵니다.

디코딩했는데 글자가 깨집니다.

원본이 UTF-8이 아닌 EUC-KR 같은 인코딩으로 만들어진 경우입니다. 이 도구는 UTF-8 기준으로 처리하므로, 구형 시스템에서 나온 값은 해당 인코딩을 지원하는 환경에서 변환해야 합니다.

Copied