URL 인코딩 · 디코딩
URL에 넣을 문자를 인코딩하거나 원문으로 되돌리세요. 주소 전체와 값 하나에 맞는 변환 방식을 선택할 수 있습니다.
입력값은 브라우저에서만 처리되며 서버로 전송되지 않습니다.
빠른 사용법
- URL 전체인지 값 하나인지 구분하세요.
- 입력 후 변환 방식을 선택하세요.
- 결과를 사용할 시스템과 형식을 맞추세요.
모드별 예시
| 목적 | 입력 | 인코딩 결과 |
|---|---|---|
| 컴포넌트 | a&b=c | a%26b%3Dc |
| 전체 URL | https://example.com/?q=a b | https://example.com/?q=a%20b |
전체 URL과 쿼리 값을 구분하세요
컴포넌트 인코딩은 &, =, / 같은 구분 문자도 변환합니다. 전체 URL에 적용하면 주소 구조 자체가 바뀔 수 있습니다. 전체 URL 모드는 구분 문자를 보존하지만 실제 쿼리 값 안에 포함된 &까지 구분해 주지는 않습니다.
디코딩의 범위
이 도구의 디코딩은 decodeURIComponent를 사용합니다. 폼 인코딩의 +를 공백으로 자동 변환하지 않습니다. a+b를 넣으면 +가 유지되고 %20은 공백이 됩니다.
이미 인코딩한 값을 다시 인코딩하면 %가 %25로 바뀝니다. 디코딩은 문자열 표현을 복원하는 기능이며 HTML·SQL·명령어의 안전성을 검증하거나 무해하게 만드는 기능은 아닙니다.
한글이 %로 길어지는 이유
퍼센트 인코딩은 문자를 UTF-8 바이트로 바꾼 뒤 바이트마다 %와 16진수 두 자리를 붙입니다. 한글 한 글자는 UTF-8에서 3바이트라 인코딩하면 9자가 됩니다.
| 입력 | UTF-8 바이트 | 인코딩 결과 |
|---|---|---|
| 한 | ED 95 9C | %ED%95%9C |
| 한글 | ED 95 9C EA B8 80 | %ED%95%9C%EA%B8%80 |
| a b | 61 20 62 | a%20b |
공백이 %20이 되기도 하고 +가 되기도 하는 이유
HTML 폼 전송 형식(application/x-www-form-urlencoded)은 공백을 +로 바꾸고, 일반 URL 인코딩 함수는 %20을 씁니다. 같은 값이라도 어느 함수를 썼는지에 따라 결과가 다르므로, 받는 서버가 어느 형식으로 해석하는지 확인하세요.
encodeURIComponent('a b') // a%20b
new URLSearchParams({q: 'a b'}).toString() // q=a+b
urllib.parse.quote('a b') # a%20b
urllib.parse.quote_plus('a b') # a+b이중 인코딩 찾기
로그나 주소에 %2520처럼 %25 뒤에 다시 16진수가 이어지면 이중 인코딩을 의심하세요. 이 도구로 한 번 디코딩했는데 %20 같은 인코딩 문자열이 다시 나오면 두 번 인코딩된 값입니다. 프록시, 프레임워크, 직접 작성한 코드 중 어느 단계에서 인코딩을 한 번 더 하는지 순서대로 확인합니다.