URL 인코더/디코더

URL을 인코딩하거나 디코딩하세요.

URL 인코더는 한국어·특수문자가 들어간 URL을 제대로 동작하게 만들어 줘요. API 호출, 검색 쿼리, 리다이렉트 처리에서 안 빼놓을 수 없는 도구거든요.

URL 인코딩이 필요한 이유

URL은 ASCII 문자만 안전해요. 한국어·이모지·공백·특수문자(`&`, `=`, `?`, `#`)가 그대로 들어가면 서버가 잘못 파싱해요. 예시 - `검색어=React` → `%EA%B2%80%EC%83%89%EC%96%B4%3DReact` - `hello world` → `hello%20world` (또는 `hello+world`) 인코딩하면 서버·브라우저·중계 라우터 모두 같은 URL로 해석해요.

encodeURI vs encodeURIComponent

JavaScript에는 두 가지 함수가 있어요. - **encodeURI**: 전체 URL용. `?`·`&`·`=`·`#`을 그대로 둬요. - **encodeURIComponent**: 쿼리값 한 조각용. 모든 특수문자 인코딩. 쿼리 파라미터 값을 인코딩할 때는 반드시 encodeURIComponent를 써야 해요. encodeURI를 쓰면 `&`·`=`이 그대로 남아서 다음 파라미터와 충돌해요.

흔한 사고 패턴

- **이중 인코딩**: 이미 인코딩된 URL을 또 인코딩하면 `%`가 `%25`로 바뀌어 깨져요 - **공백 처리**: 쿼리에서는 `+` 또는 `%20` 둘 다 OK지만 path에서는 `%20`만 OK - **`#` 처리**: fragment 구분자라 인코딩 안 하면 그 뒤가 잘림 - **한글 도메인**: punycode(`xn--...`)로 별도 변환 필요. URL 인코딩이랑 다른 표준이거든요

자주 묻는 질문

이미 인코딩된 URL인지 어떻게 알아요?

`%` 뒤에 16진수 두 자리가 붙어 있으면 거의 인코딩된 거예요. `%E`, `%2`, `%3` 같은 패턴이 보이면 디코더로 먼저 풀어 본 뒤 다시 인코딩하세요.

한글 검색어 인코딩 결과가 길게 나오는 이유는?

한글 1글자가 UTF-8로 3바이트라서 인코딩하면 `%XX%XX%XX` 9자가 돼요. 영문 1글자는 인코딩 안 되거나 `%XX` 3자라서 짧게 보이는 거예요.

공백을 +로 할까 %20으로 할까?

URL path에서는 `%20`만 안전해요. 쿼리스트링에서는 둘 다 OK지만 일관성을 위해 `%20`을 권장해요.