URL 인코딩 / 디코딩
URL 구성 요소와 쿼리 문자열의 퍼센트 인코딩/디코딩
로컬 실행
loading…
이 도구에 대해
공백, & 기호, 비 ASCII 문자 같은 것들은 URL에 그대로 들어갈 수 없어 퍼센트 인코딩됩니다. 공백은 %20이 되고, 你는 %E4%BD%A0이 됩니다. 이 도구는 텍스트를 URL에 안전하게 넣을 수 있게 인코딩하고, 퍼센트 이스케이프된 문자열을 읽을 수 있는 텍스트로 디코딩합니다. 쿼리 문자열에서 공백을 + 로 쓰는 관례도 포함해서요.
인코딩 모드가 두 가지인 이유는 JavaScript 자체에 두 가지가 있기 때문입니다. 컴포넌트 모드(encodeURIComponent)는 URL 구분자가 될 수 있는 모든 문자를 이스케이프하며, 쿼리 문자열의 단일 값에 필요한 것이 바로 이것입니다. 전체 URI 모드(encodeURI)는 /, ?, & 같은 구조 문자를 보존하며, 탐색 가능한 상태를 유지해야 하는 URL 전체를 인코딩할 때 씁니다.
디코딩은 잘못된 % 시퀀스에 엄격합니다. 홀로 있는 % 나 %ZZ 는 조용히 통과시키지 않고 오류로 보고하는데, 브라우저와 서버가 이를 다루는 방식과 정확히 같습니다.
자주 묻는 질문
- 컴포넌트 모드와 전체 URI 모드는 언제 각각 쓰나요?
- URL 안에 들어갈 하나의 값(검색어, 리디렉션 대상, 파라미터 속 이메일 주소)을 인코딩할 때는 컴포넌트 모드입니다. 값 안의 & 와 = 가 쿼리 문자열을 깨지 않게 됩니다. 표시나 전송용으로 완전한 URL을 인코딩할 때는 전체 URI 모드로, URL 구조가 살아남습니다.
- 왜 + 가 때때로 공백을 의미하나요?
- HTML 폼 제출과 쿼리 문자열에 쓰이는 application/x-www-form-urlencoded 형식이 역사적으로 공백을 + 로 인코딩했기 때문입니다. URL 경로에서 + 는 그냥 더하기 기호입니다. 여기의 디코더는 쿼리 문자열 의미론에 맞춰 + 를 공백으로 취급합니다. %20은 어디서나 항상 동작합니다.
- 왜 제 문자열이 이중 인코딩(%2520)되어 있나요?
- %25는 % 자체의 인코딩이므로, %2520은 %20이라는 텍스트가 한 번 더 인코딩되었다는 뜻입니다. 시스템의 두 계층이 각각 인코딩할 때 일어납니다. 여기서 디코딩을 두 번 실행해 풀어낸 뒤, 인코딩하지 말아야 할 계층을 고치세요.
- Unicode 문자는 올바르게 처리되나요?
- 네. WHATWG URL 표준에 따라 텍스트를 먼저 UTF-8로 인코딩한 뒤 각 바이트를 퍼센트 이스케이프합니다. CJK 문자 하나가 %XX 그룹 세 개가 되는 이유가 바로 이것입니다.