100% 클라이언트 사이드: 모든 인코딩 및 디코딩은 브라우저에서 처리됩니다. 서버로 데이터가 전송되지 않습니다.

인코딩 / 디코딩

빠른 테스트 — 문자를 클릭하여 삽입:

공백SP & = ? # / @ + % " < > 🚀 한글

출력

URL 파서

위에 URL을 붙여넣으면 구성 요소를 확인할 수 있습니다

URL 인코딩이란?

URL 인코딩(퍼센트 인코딩)은 URL(Uniform Resource Locator)에서 허용되지 않거나 특별한 의미를 가진 문자를 표현하는 방법입니다. 안전하지 않거나 예약된 문자를 퍼센트 기호(%)와 해당 문자의 UTF-8 바이트 값을 나타내는 두 자리 대문자 16진수로 대체합니다. 예를 들어 공백 문자(ASCII 32 / 0x20)는 %20이 되고, 앰퍼샌드(&)는 %26이 됩니다.

URL은 출력 가능한 ASCII 문자의 하위 집합으로 제한됩니다. 이 안전한 집합 밖의 문자 — 이모지와 비라틴 문자를 포함한 유니코드 문자, URL 구문에서 특별한 의미를 가진 문자(?, #, /, = 등), 보이지 않는 제어 문자 — 는 URL에 포함시키기 전에 반드시 인코딩해야 합니다. 인코딩하지 않으면 잘못된 형식의 URL, 깨진 링크, 보안 취약점 또는 서버 측 파싱 오류가 발생할 수 있습니다.

퍼센트 인코딩은 RFC 3986 (URI 구문)에 정의되어 있으며 HTTP 요청이 이루어지는 모든 곳에서 사용됩니다: 쿼리 문자열, 폼 제출, 경로 세그먼트, URL 값을 전달하는 HTTP 헤더.

encodeURI와 encodeURIComponent 비교

JavaScript는 URL 인코딩을 위한 두 가지 내장 함수를 제공하며, 올바른 것을 선택하는 것이 정확성에 중요합니다:

함수용도인코딩하지 않는 문자
encodeURI() 구조적으로 유효한 완전한 URL 인코딩 A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) #
encodeURIComponent() 단일 URL 컴포넌트(예: 쿼리 값) 인코딩 A-Z a-z 0-9 - _ . ! ~ * ' ( )
decodeURI() encodeURI의 역변환 encodeURI가 인코딩하지 않는 문자는 디코딩하지 않음
decodeURIComponent() encodeURIComponent의 역변환 모든 퍼센트 인코딩 시퀀스를 디코딩

기본 원칙: URL에 삽입할 값(쿼리 파라미터 이름과 값, 사용자 데이터가 포함된 경로 세그먼트)에는 encodeURIComponent를 사용합니다. 이미 구조적으로 올바른 완전한 URL이 있고 전송에 안전하게 하고 싶을 때만(예: fetch()나 앵커 태그에 전달하기 전) encodeURI를 사용합니다. 전체 URL에 encodeURIComponent를 사용하면 프로토콜과 호스트의 슬래시와 콜론이 인코딩되어 URL이 깨집니다.

URL 인코딩이 필요한 일반적인 문자

문자인코딩 형태인코딩이 필요한 이유
공백%20 (쿼리 문자열에서는 +)URL의 어디에서도 공백은 허용되지 않음
&%26쿼리 파라미터 구분자; 값에서는 반드시 인코딩
=%3D파라미터 이름과 값 분리; 값에서는 반드시 인코딩
?%3F쿼리 문자열 시작; 경로 세그먼트와 값에서는 반드시 인코딩
#%23프래그먼트 시작; # 이후의 모든 내용은 서버로 전송되지 않음
/%2F경로 구분자; 값의 일부인 경우 인코딩 필요
+%2B폼 인코딩 쿼리 문자열에서 "공백"을 의미; 리터럴 +는 %2B로 인코딩
@%40authority(userinfo@host)에 사용; 경로/쿼리 값에서는 인코딩
%%25이스케이프 문자 자체; 리터럴 %는 %25로 인코딩 필요
"%22HTML 속성 인용을 깨뜨릴 수 있는 안전하지 않은 문자
🚀 (U+1F680)%F0%9F%9A%80비ASCII 유니코드는 UTF-8 인코딩 후 퍼센트 인코딩
한 (U+D55C)%ED%95%9C한국어 문자는 각각 세 개의 UTF-8 바이트로 인코딩

자주 묻는 질문

URL 인코딩이란 무엇입니까?

URL 인코딩(퍼센트 인코딩)은 URL의 특수 문자와 비ASCII 문자를 %와 UTF-8 바이트 값을 나타내는 두 자리 16진수로 대체하여 안전한 형식으로 변환합니다. 이렇게 하면 URL이 RFC 3986에 정의된 허용 ASCII 하위 집합의 문자만 포함하도록 보장하여 파싱 오류와 모호함을 방지합니다.

encodeURI와 encodeURIComponent의 차이점은 무엇입니까?

encodeURI는 완전한 URL용이며 ://, /, ?, &, =와 같은 구조적 문자를 인코딩하지 않습니다. encodeURIComponent는 개별 값(쿼리 파라미터 값 등)용이며 이러한 구조적 문자도 인코딩하여 값이 포함된 URL 구조를 깨뜨리지 않도록 합니다. URL에 사용자 제공 데이터를 삽입할 때는 항상 encodeURIComponent를 사용하십시오.

URL에서 공백을 나타내는 %20과 +의 차이점은 무엇입니까?

%20은 보편적으로 올바른 공백의 퍼센트 인코딩이며 URL의 모든 부분에서 유효합니다. + 기호는 쿼리 문자열 내에서 콘텐츠 타입이 application/x-www-form-urlencoded(HTML 폼 제출의 기본값)인 경우에만 공백을 나타냅니다. URL 경로에서 +는 공백이 아닌 리터럴 플러스 기호입니다. 최대 호환성과 명확성을 위해 프로그래밍 방식으로 구성하는 URL에서는 +보다 %20을 사용하는 것이 좋습니다.

유니코드 문자는 URL에서 어떻게 인코딩됩니까?

유니코드 문자는 유니코드 코드 포인트에서 직접 퍼센트 인코딩되지 않습니다. 먼저 문자가 UTF-8 바이트 시퀀스로 변환되고 각 바이트가 개별적으로 퍼센트 인코딩됩니다. 예를 들어 이모지 🚀(U+1F680)는 UTF-8 표현이 F0 9F 9A 80이며 %F0%9F%9A%80으로 인코딩됩니다. JavaScript의 encodeURIComponent는 이를 자동으로 처리하므로 비ASCII 문자를 포함할 수 있는 사용자 입력을 인코딩할 때 가장 안전한 옵션입니다.

관련 개발자 도구