왜 만들었나요
검색 결과 주소를 복사했더니 한글이 %EB%B6%80%EB%8F%99%EC%82%B0 같은 문자열로 바뀌어 뭐가 뭔지 알 수 없던 적이 있으실 겁니다. 로그를 볼 때마다 그걸 손으로 풀기 번거로워서, 붙여넣으면 바로 양쪽으로 바뀌게 만들었습니다.
주소에 그대로 담을 수 없는 한글·공백·특수문자를 %XX 형태로 바꾸고, 반대로 되돌려 읽습니다.
로딩 중...
검색 결과 주소를 복사했더니 한글이 %EB%B6%80%EB%8F%99%EC%82%B0 같은 문자열로 바뀌어 뭐가 뭔지 알 수 없던 적이 있으실 겁니다. 로그를 볼 때마다 그걸 손으로 풀기 번거로워서, 붙여넣으면 바로 양쪽으로 바뀌게 만들었습니다.
Note
입력한 주소나 텍스트는 서버로 전송되지 않습니다. URL 인코딩·디코딩은 변환을 전부 브라우저 안에서 처리해, 내부 주소나 토큰이 든 링크도 기기 밖으로 나가지 않습니다.
URL 인코딩·디코딩 중 어느 방향인지 위쪽에서 고릅니다. 한글을 주소에 담을 때는 인코드, 암호처럼 보이는 문자열을 읽을 때는 디코드입니다. 탭을 바꾸면 입력창이 비워지니, 반대 방향으로 이어 돌리려면 결과를 복사해 다시 붙여넣으세요.

왼쪽 입력창에 주소나 텍스트를 붙여넣습니다. 샘플 버튼으로 시작해도 됩니다.

입력하는 즉시 오른쪽에 결과가 나옵니다. 복사 버튼으로 가져가세요. 오른쪽 결과창은 읽기 전용이라 직접 고칠 수 없습니다 — 바꿀 내용은 왼쪽 입력창에서 고칩니다.

한글이 든 검색 주소를 넣으면 이렇게 나옵니다.
인코드
부동산 시세 → %EB%B6%80%EB%8F%99%EC%82%B0%20%EC%8B%9C%EC%84%B8
디코드
%EC%84%9C%EC%9A%B8 → 서울
샘플 버튼은 주소 한 줄을 통째로 넣습니다. 그때는 한글만 바뀌는 게 아니라 이렇게 나옵니다.
넣은 것
https://example.com/search?q=안녕 세계&lang=ko&page=1
나온 것
https%3A%2F%2Fexample.com%2Fsearch%3Fq%3D%EC%95%88%EB%85%95%20%EC%84%B8%EA%B3%84%26lang%3Dko%26page%3D1
https:// 의 : 와 /, 그리고 ? & = 까지 모두 %3A %2F %3F %26 %3D 로 바뀝니다. 주소 구분 기호까지 함께 바꾸는 방식이라 그렇습니다. 영문·숫자와 -_.!~*'() 는 그대로 남습니다. 주소를 통째로 넣으면 링크로 쓸 수 없는 문자열이 되니, 아래 "전체 주소를 통째로 인코딩하면 안 됩니다"도 함께 보세요.
인터넷 주소 규격이 만들어질 때는 영문자·숫자·일부 기호만 쓰도록 정해졌습니다. 한글이나 공백은 그 목록에 없어서, 그대로 넣으면 시스템마다 다르게 해석하거나 주소가 끊깁니다.
그래서 이런 글자를 % 뒤에 숫자 두 자리로 바꿔 표현합니다. 한글 한 글자는 보통 %XX 세 개로 바뀝니다.
전부 외울 필요는 없지만, 아래 몇 개는 주소에서 워낙 자주 보여 눈에 익혀 두면 편합니다.
| 원래 | 바뀐 모습 |
|---|---|
| 공백 | %20 (또는 +) |
/ | %2F |
? | %3F |
& | %26 |
= | %3D |
# | %23 |
두 번 인코딩된 경우입니다. %가 다시 인코딩되면 %25가 되므로, %2520은 원래 공백이 두 번 변환된 것입니다. 디코드를 한 번 더 돌리면 풀립니다.
반대로 %ZZ 처럼 % 뒤 두 자리가 어긋난 값이나 홀로 남은 % 를 넣으면 결과창에 올바르지 않은 인코딩 형식입니다 안내가 뜹니다. 값이 중간에 잘려 붙여넣어졌는지 확인해 보세요.
주소 뒤 검색어 부분(? 뒤)에서는 공백을 +로 쓰는 방식이 오래전부터 함께 쓰였습니다. 둘 다 공백을 뜻하지만 위치에 따라 다르게 해석되니, 주소 경로에는 %20을 쓰는 게 안전합니다.
주소에 한글이나 공백이 섞이면 문제가 생기는 자리들이 있습니다. URL 인코더는 그럴 때 씁니다.
| 상황 | 이유 |
|---|---|
| 한글이 든 주소를 메신저로 전달 | % 범벅이 된 주소를 읽을 수 있게 |
| 검색 결과 주소 공유 | 검색어가 제대로 전달되도록 |
| 주소가 중간에 끊겨서 전달됨 | 공백이나 특수문자가 원인인 경우가 많습니다 |
| 로그에 찍힌 주소 확인 | 무슨 값이 넘어갔는지 풀어서 보기 |
https:// 의 : 와 / 까지 바뀌어 주소가 아예 동작하지 않게 됩니다.
잘못된 예
https%3A%2F%2Fexample.com%2F검색 ← 링크로 안 먹힘
올바른 예
https://example.com/검색?q=%EC%82%AC%EA%B3%BC
↑ 값 부분만 인코딩
바꿔야 하는 건 검색어나 이름처럼 값이 들어가는 부분입니다. 주소의 뼈대(https://, 도메인, /, ?, =)는 그대로 두세요.
주소에 못 쓰는 글자를 % + 숫자 두 자리로 바꿔 적는 방식입니다. URL 인코딩이라고도 부르며, 주소·검색어·양식 전송 등 웹 곳곳에서 쓰입니다. URL 인코딩·디코딩은 이 규칙을 양쪽으로 오가는 일이고, 되돌리는 쪽을 보통 디코딩이라 부릅니다.
인터넷 표준 규약(RFC 3986)에 따르면 URL 주소에는 기본적으로 영문 알파벳, 숫자, 그리고 일부 제한된 기호(ASCII 문자셋)만 사용할 수 있도록 정의되어 있습니다. 한글, 이모지, 공백 등은 이 규칙에 포함되지 않기 때문에, 웹 브라우저와 서버가 이 문자들을 올바르게 인식하고 통신하기 위해서는 허용된 문자열의 조합(퍼센트 기호와 16진수 숫자)으로 변환하는 과정이 필수적입니다.
이를 '퍼센트 인코딩(Percent-encoding)'이라고 부릅니다. % 기호 뒤에 붙는 두 자리 문자는 해당 원본 문자의 유니코드(UTF-8) 값을 16진수로 표현한 것입니다. 예를 들어 공백은 16진수로 20이기 때문에 '%20'으로 변환되며, 웹 서버는 이 '%20'을 전달받으면 다시 공백으로 해석하여 처리합니다.
기본적인 웹 표준 URL 인코딩 규칙에서는 공백을 '%20'으로 변환하는 것이 맞습니다. 하지만 HTML 폼(Form) 데이터를 'application/x-www-form-urlencoded' 방식으로 서버에 제출할 때, 역사적인 이유로 공백이 덧셈 기호('+')로 변환되기도 합니다. 최신 웹 개발 환경과 API 통신에서는 혼란을 방지하기 위해 공백을 '%20'으로 통일하여 사용하는 것을 더욱 권장합니다.
안 됩니다. https:// 의 콜론과 슬래시까지 바뀌어 버려서 주소가 아예 동작하지 않게 됩니다. 바꿔야 하는 것은 검색어나 이름처럼 값이 들어가는 부분이고, 주소의 뼈대(https://, 도메인, 슬래시, 물음표, 등호)는 그대로 두어야 합니다. 예를 들어 검색어만 인코딩한 https://example.com/검색?q=%EC%82%AC%EA%B3%BC 형태가 올바릅니다.
두 번 인코딩된 경우입니다. 퍼센트 기호 자체가 다시 인코딩되면 %25가 되므로, %2520은 원래 공백(%20)이 한 번 더 변환된 것입니다. 이럴 때는 디코드를 한 번 더 실행하면 됩니다. 시스템을 여러 단계 거치면서 각 단계가 인코딩을 한 번씩 더 걸 때 흔히 생기므로, %가 사라지고 읽을 수 있는 글자가 나올 때까지 반복하세요.
마지막 업데이트: