이 도구는 무엇인가요?
URL 인코딩(퍼센트 인코딩)은 URL에서 허용되지 않는 문자를 %와 뒤이은 16진수 바이트 값으로 바꿉니다 — 공백은 %20이 되고, 你는 %E4%BD%A0가 됩니다. 이 처리가 없으면 공백, &, ?, 비ASCII 문자 같은 것들이 URL 구조를 깨뜨리거나 서버가 잘못 해석할 수 있습니다.
실제로 필요한 상황은 두 가지이며, 이 도구는 둘 다 지원합니다: 쿼리 파라미터 안에 들어갈 값을 인코딩하는 경우(컴포넌트 모드 — / ? & = 도 인코딩), URL 전체를 구조는 유지한 채 인코딩하는 경우(전체 URL 모드 — :// ? & 는 그대로 둠).
알아두면 좋은 역사적 특이점 하나: URL 표준(RFC 3986)에 따르면 공백은 원래 %20이 맞지만, HTML 폼 제출에서는 관례적으로 플러스 기호(+)로 인코딩해왔습니다. 그래서 실제로 q=hello%20world와 q=hello+world 둘 다 흔히 보게 되고, 폼 데이터를 디코딩할 때는 +를 따로 처리해야 하는 경우가 생깁니다.
왜 사용해야 할까요?
- 쿼리 문자열을 안전하게 구성 — 사용자가 입력한 값에 &, =, 공백이 있어도 URL이 깨지지 않습니다.
- 로그, 애널리틱스, 리다이렉트 체인에서 나온 긴 인코딩 URL을 디코딩해 실제 내용을 확인합니다.
- 중국어, 이모지 등 비ASCII 텍스트를 UTF-8로 정확히 처리합니다.
- 두 가지 모드로 URL 전체의 :나 /를 실수로 인코딩하는 일을 방지합니다.
- 무료, 즉시 실행, 업로드 없음.
사용 방법
- 텍스트나 URL을 입력창에 붙여넣으세요.
- 모드를 선택하세요: 쿼리 파라미터 값이면 "컴포넌트", URL 전체면 "전체 URL".
- "인코딩" 또는 "디코딩" 버튼을 누르세요.
- 결과를 복사하세요.
예시
입력
https://example.com/search?q=hello world & 你好결과
컴포넌트 모드: https%3A%2F%2Fexample.com%2Fsearch%3Fq%3Dhello%20world%20%26%20%E4%BD%A0%E5%A5%BD
전체 URL 모드: https://example.com/search?q=hello%20world%20&%20%E4%BD%A0%E5%A5%BD컴포넌트 모드는 구조 문자까지 인코딩하고, 전체 URL 모드는 구조를 보존합니다.
자주 쓰이는 상황
- 검색어나 필터 값이 사용자 입력에서 오고 공백, &, 특수문자가 포함될 수 있는 공유용 URL을 만들 때.
- 이메일이나 광고 캠페인에서 온 긴 추적/리다이렉트 URL을 클릭하기 전에 디코딩해서 실제 목적지와 파라미터를 확인할 때.
- 서버가 쿼리 파라미터를 제대로 읽지 못하는 문제를 디버깅할 때 — 흔한 원인은 인코딩됐어야 할 예약 문자가 그대로 남아 있는 경우입니다.
- 중국어, 일본어, 아랍어 등 비영어권 값을 URL 쿼리 문자열에 넣기 위해 준비할 때.
encodeURIComponent와 encodeURI의 실제 차이
이 두 가지는 이 도구의 두 모드와 그대로 대응하며, 개발자들이 이미 알고 있는 실제 자바스크립트 함수와도 일치합니다. encodeURIComponent(컴포넌트 모드)는 예약되지 않은 소수의 문자를 제외하고 모두 인코딩하기 때문에, URL에 삽입되는 단일 값이라면 무엇이든 안전하게 처리합니다 — 쿼리 파라미터, 경로 세그먼트, 해시 프래그먼트 값에 쓰면 됩니다. encodeURI(전체 URL 모드)는 URL의 구조 문자(:, /, ?, #, &, =)를 그대로 두는데, 이미 구조가 갖춰진 URL 전체를 인코딩한다고 가정하기 때문입니다 — 이걸 단일 파라미터 값에 쓰면 그 값에 포함된 &나 =가 인코딩되지 않아 실패하는데, 이것이 잘못된 모드를 고를 때 가장 흔히 생기는 실수입니다.
예약 문자와 비예약 문자
URL 규격(RFC 3986)은 문자를 두 그룹으로 나눕니다. 비예약 문자(알파벳, 숫자, - _ . ~)는 항상 안전하며 절대 인코딩되지 않고, 예약 문자(: / ? # [ ] @ ! $ & ' ( ) * + , ; =)는 URL 구조에서 특별한 의미를 가지므로 구조용 문장부호가 아니라 실제 데이터로 쓰일 때만 인코딩이 필요합니다. 두 모드가 존재하는 이유가 바로 이것입니다 — 컴포넌트 모드는 예약 문자를 보호해야 할 데이터로 취급하고, 전체 URL 모드는 보존해야 할 구조로 취급합니다. 이 구분을 이해하면 언제 어떤 모드를 쓸지 무작정 외우는 것보다 훨씬 유용한데, 같은 문자(예: &)가 URL 안에서 맡은 역할에 따라 때로는 인코딩되고 때로는 그대로 남는 이유를 설명해주기 때문입니다.
자주 묻는 질문
컴포넌트 모드와 전체 URL 모드는 언제 써야 하나요?
쿼리 파라미터 안에 들어갈 단일 값을 인코딩할 때는 컴포넌트 모드(encodeURIComponent)를 씁니다 — /, ?, &, = 까지 인코딩해서 URL이 깨지지 않도록 합니다. URL 전체를 인코딩할 때는 전체 URL 모드(encodeURI)를 씁니다 — 구조 문자를 그대로 두어 URL이 계속 작동하게 합니다.
공백이 + 대신 %20으로 나오는 이유는 뭔가요?
둘 다 맥락에 따라 유효합니다. %20은 공백에 대한 보편적인 퍼센트 인코딩이고, +는 예전 방식인 application/x-www-form-urlencoded 형식의 쿼리 문자열 안에서만 공백을 의미합니다. 이 도구는 어디서나 통하는 %20을 사용합니다.
디코딩할 때 왜 오류가 나나요?
입력값에 잘못된 퍼센트 시퀀스가 있는 경우입니다. 예를 들어 %뒤에 16진수 두 자리가 오지 않는 경우죠. URL이 중간에 잘렸거나 이중 디코딩된 경우 자주 발생합니다. 잘못된 % 시퀀스를 고치거나 제거하세요.
이중 인코딩이 뭔가요?
이미 인코딩된 텍스트를 또 인코딩하는 것입니다. %20이 %2520이 되는데, %자체가 %25로 인코딩되기 때문입니다. 흔한 실수이니, 디코딩한 결과에 여전히 %코드가 남아 있다면 한 번 더 디코딩하세요.
중국어와 이모지도 처리되나요?
네. 텍스트는 UTF-8 바이트로 인코딩되므로 你好는 %E4%BD%A0%E5%A5%BD가 되고 완벽하게 다시 디코딩됩니다 — 브라우저와 동일한 방식입니다.