검색어 인코딩하기
hello world & more
hello%20world%20%26%20more
공백은 %20으로 바뀌고, &는 %26이 됩니다. 그래야 쿼리 파라미터 구분자로 오해받지 않습니다.
URL 구성 요소를 안전하게 인코딩/디코딩.
마지막 업데이트
URL 인코더(퍼센트 인코더, URI 인코더라고도 부릅니다)는 URL에서 예약되어 있거나 그대로 쓰면 안 되는 문자들을 % + 두 자리 16진수 형태로 바꿔주는 도구입니다. 쿼리스트링을 만들 때, 경로 세그먼트를 이스케이프할 때, 공백이나 한글·이모지가 들어간 URL을 공유할 때, 리다이렉트 디버깅할 때 자주 꺼내 쓰게 됩니다.
URL은 ASCII 문자 중에서도 일부만 사용할 수 있습니다. 그 범위를 벗어나는 공백, 악센트, 이모지, 그리고 데이터로 쓰일 때의 ?, #, &, = 같은 예약 문자들은 퍼센트 인코딩을 거쳐야 브라우저에서 서버까지 깨지지 않고 도착합니다.
자바스크립트에는 두 가지 인코딩 함수가 있습니다. encodeURI는 URL 구조(/, ?, #, &)를 그대로 두고, encodeURIComponent는 예약 문자를 모두 인코딩합니다. 쿼리스트링에 끼워 넣을 *값*에는 encodeURIComponent, *URL 전체*를 그대로 살려야 할 때는 encodeURI를 쓰면 됩니다.
% + 16진수 두 자리로 바꾸는 방식입니다. 예를 들어 공백은 %20이 됩니다.: / ? # & = +)는 URL 구조에서 의미를 갖습니다. 구분자가 아니라 데이터로 쓸 때는 반드시 인코딩해야 합니다.원본 텍스트를 URL에 안전한 형태로 만들고 싶다면 Encode를, % 인코딩된 문자열을 원래 텍스트로 되돌리고 싶다면 Decode를 선택하세요.
쿼리스트링 값에는 encodeURIComponent(예약 문자 전부 인코딩), URL 전체에는 encodeURI(구조 유지)를 선택합니다.
원본 텍스트나 인코딩된 URL을 붙여 넣습니다. 여러 줄을 한 번에 디코딩하는 것도 됩니다.
인코딩되거나 디코딩된 값을 복사하세요. 변환은 브라우저 안에서 처리되므로, URL에 들어 있는 민감한 값도 외부로 나가지 않습니다.
실무에서 가장 자주 마주치는 문자들과 그 퍼센트 인코딩 형태입니다. 예약 문자의 의미는 RFC 3986을 따릅니다.
| 문자 | 인코딩 | 이유 |
|---|---|---|
| 공백 | %20 | URL에 공백 자체를 넣을 수 없음 |
! | %21 | 일부 서버에서 예약어로 취급 |
# | %23 | 프래그먼트(앵커) 시작 표시 |
$ | %24 | 예약 문자 |
& | %26 | 쿼리 파라미터 구분자 |
+ | %2B | 폼 인코딩 본문에서는 공백을 의미 |
/ | %2F | 경로 구분자 |
: | %3A | 스킴과 호스트 구분 |
= | %3D | 쿼리스트링에서 키와 값 구분 |
? | %3F | 쿼리스트링 시작 표시 |
@ | %40 | userinfo와 호스트 구분 |
| UTF-8 바이트 | %C3%A9 | 비ASCII 문자는 바이트 단위로 인코딩 |
hello world & more
hello%20world%20%26%20more
공백은 %20으로 바뀌고, &는 %26이 됩니다. 그래야 쿼리 파라미터 구분자로 오해받지 않습니다.
café
caf%C3%A9
é는 UTF-8로 0xC3 0xA9 두 바이트짜리 시퀀스라서, 글자는 하나지만 인코딩 결과에는 %XX가 *두 개* 붙습니다.
https://example.com/path?q=hello world
https://example.com/path?q=hello%20world
https%3A%2F%2Fexample.com%2Fpath%3Fq%3Dhello%20world
encodeURI는 슬래시, ?, = 같은 URL 구조를 그대로 유지합니다. 반면 encodeURIComponent는 예약 문자를 전부 인코딩하기 때문에, 쿼리스트링 안에 들어갈 *값*에 사용해야지 URL 전체에 쓰면 안 됩니다.
encodeURI를 쓰는 경우 — &, =이 그대로 살아남아서 파라미터 파싱이 깨집니다.%20이 %2520으로 보인다면 십중팔구 더블 인코딩 버그입니다.+가 application/x-www-form-urlencoded 본문에서는 공백을 뜻하지만, URL의 path나 query에서는 그냥 + 기호 그대로라는 점을 깜빡하는 경우.% + 16진수 두 자리 형태로 바꿔서 표현하는 방식입니다.encodeURI는 URL 구조용 문자(/, ?, #, &, =, +)를 그대로 둡니다. encodeURIComponent는 이걸 모두 인코딩하기 때문에, URL 안에 들어가는 개별 *값*(쿼리 파라미터 값, 경로 세그먼트, 프래그먼트 등)에 적합합니다. MDN 문서 encodeURI, encodeURIComponent도 함께 참고하세요.%20이 되나요?0x20)의 퍼센트 인코딩인 %20으로 대체됩니다.decodeURI, decodeURIComponent, 또는 어떤 URL 디코더든 퍼센트 인코딩을 원래 문자로 되돌려 줍니다.