·2분 읽기

URL 특수문자 인코딩 완벽 가이드 — %20, %23, %26 의미와 변환법

URL에서 특수문자가 어떻게 인코딩되는지 원리를 설명해요. 자주 쓰는 인코딩 표, JavaScript/Python 변환 방법까지 한번에 정리했어요.

URL 특수문자 인코딩 완벽 가이드 — %20, %23, %26 의미와 변환법
🔗
URL 인코더/디코더 바로 사용하기
URL을 인코딩하거나 디코딩하세요

URL에 특수문자를 왜 넣을 수 없나요?

URL은 원래 영문자, 숫자, 일부 기호만 사용하도록 설계됐어요. RFC 3986 표준에 따르면 URL에 안전하게 사용할 수 있는 문자는 A-Z, a-z, 0-9, 그리고 - _ . ~ 4개뿐이에요. 공백, 한글, 특수문자를 URL에 그대로 넣으면 서버가 잘못 해석할 수 있어요. 예를 들어 &는 URL에서 파라미터 구분자로 쓰이기 때문에, 검색어에 &가 포함되면 의도와 다르게 동작하거든요. 그래서 안전하지 않은 문자를 퍼센트 인코딩(Percent Encoding)으로 변환해요. 각 문자의 UTF-8 바이트 값을 %XX 형식으로 바꾸는 거예요.

자주 쓰는 URL 인코딩 표

가장 자주 만나는 인코딩 값들을 정리했어요. 공백은 %20 또는 +로 인코딩돼요. 쿼리 스트링에서는 +를 쓰는 경우도 있지만, %20이 더 표준적이에요. 느낌표(!)는 %21, 샵(#)은 %23이에요. #은 URL에서 프래그먼트(앵커)를 의미하기 때문에 검색어에 #이 있으면 반드시 인코딩해야 해요. 앰퍼샌드(&)는 %26이에요. 파라미터 구분자와 겹치기 때문에 인코딩이 필수예요. 등호(=)는 %3D, 물음표(?)는 %3F예요. 이것들도 URL 구문에서 특별한 의미를 가지기 때문에 값으로 사용할 때는 인코딩해야 해요. 한글은 UTF-8로 변환되어 한 글자당 3바이트, 즉 %XX%XX%XX 형태가 돼요. 예를 들어 가는 %EA%B0%80으로 인코딩돼요.

JavaScript와 Python에서 인코딩하기

JavaScript에서는 encodeURIComponent() 함수를 사용하세요. URL의 쿼리 파라미터 값을 인코딩할 때 적합해요. 알파벳, 숫자, 그리고 - _ . ~ 를 제외한 모든 문자를 인코딩해요. encodeURI()도 있지만, 이건 URL 전체를 인코딩할 때 사용해요. :, /, ?, # 같은 URL 구조 문자를 인코딩하지 않기 때문에 파라미터 값에는 부적합해요. Python에서는 urllib.parse.quote() 함수를 사용해요. 기본적으로 /를 인코딩하지 않으므로, 모든 문자를 인코딩하려면 safe 파라미터를 빈 문자열로 설정하세요. Python 3의 urllib.parse.urlencode()는 딕셔너리를 쿼리 스트링으로 변환할 때 편해요. 키와 값을 자동으로 인코딩해 주거든요. 디코딩은 JavaScript에서 decodeURIComponent(), Python에서 urllib.parse.unquote()를 사용하면 돼요.

흔한 실수와 해결법

가장 흔한 실수는 이중 인코딩이에요. 이미 인코딩된 문자열을 다시 인코딩하면 %25가 붙어요. %20이 %2520이 되는 거죠. 인코딩 전에 문자열이 이미 인코딩되어 있는지 확인하세요. 공백을 +로 인코딩한 건 %20으로 인코딩한 것과 디코딩 방법이 다를 수 있어요. application/x-www-form-urlencoded에서는 +를 공백으로 해석하지만, URL 경로에서는 +를 문자 그대로 해석해요. 한국어 URL을 다룰 때 인코딩 방식이 UTF-8인지 확인하세요. 오래된 시스템에서는 EUC-KR 인코딩을 사용해서 한글이 깨지는 경우가 있어요. Toolkio의 URL 인코더/디코더를 활용하면 인코딩 결과를 빠르게 확인하고 디버깅할 수 있어요. 이중 인코딩 여부도 눈으로 쉽게 확인할 수 있거든요. URL 인코딩의 기본 사용법이 궁금하다면 [URL 인코딩 방법 가이드](/blog/how-to-encode-urls)를 참고하세요. 한국어 URL 처리에서 자주 발생하는 문제는 [한국어 URL 인코딩 방법](/blog/korean-url-encoding-method)에서 자세히 다루고 있어요.

지금 바로 URL 인코더/디코더를 사용해보세요

무료이며, 브라우저에서 바로 실행됩니다.

URL 인코더/디코더