URL 인코더 & 디코더 — 무료 온라인 도구
URL을 즉시 인코딩 및 디코딩합니다. encodeURIComponent, encodeURI 또는 쿼리 문자열 인코딩으로 특수 문자, 쿼리 파라미터, 유니코드를 처리합니다. 전체 URL을 구성 요소별로 파싱합니다 — 100% 클라이언트 사이드, 브라우저를 떠나지 않습니다.
인코딩 / 디코딩
빠른 테스트 — 문자를 클릭하여 삽입:
출력
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로 인코딩 |
| @ | %40 | authority(userinfo@host)에 사용; 경로/쿼리 값에서는 인코딩 |
| % | %25 | 이스케이프 문자 자체; 리터럴 %는 %25로 인코딩 필요 |
| " | %22 | HTML 속성 인용을 깨뜨릴 수 있는 안전하지 않은 문자 |
| 🚀 (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 문자를 포함할 수 있는 사용자 입력을 인코딩할 때 가장 안전한 옵션입니다.
관련 개발자 도구
- Base64 인코더 & 디코더 — 데이터 URI 및 API 페이로드용 Base64 문자열 인코딩 및 디코딩
- JSON 포맷터 & 유효성 검사기 — 구문 강조로 JSON 정렬 및 검증
- CORS 에러 디버거 — 크로스 오리진 오류 진단 및 Express, Nginx, Apache 수정 코드 제공
- HTTP 상태 코드 참조 — 모든 HTTP 상태 코드의 설명과 예제 확인