onlinetools.dev

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 그룹 세 개가 되는 이유가 바로 이것입니다.
관련 도구