URL 인코더·디코더 소개
URL에는 제한된 ASCII 문자만 쓸 수 있습니다. 공백, 한글, 악센트가 붙은 글자, 이모지, 그리고 &, =, ?, #처럼 URL에서 특별한 뜻을 가진 문자는 퍼센트 인코딩한 바이트로 적어야 합니다. 예를 들어 공백은 %20이 되고 "é"는 %C3%A9가 됩니다. 이 도구는 텍스트를 이 형식으로 바꾸고 다시 원래대로 되돌립니다.
URL 표준이 정한 UTF-8 인코딩을 쓰며, JavaScript의 encodeURIComponent, encodeURI 함수와 같은 규칙을 따릅니다. 내장된 URL 분석 기능은 전체 주소를 프로토콜, 호스트, 경로, 프래그먼트로 나누고 쿼리 매개변수를 디코딩한 목록으로 보여 줍니다.
사용 방법
- "인코딩"이나 "디코딩"을 고르세요.
- 모드를 고르세요. 쿼리 값 하나나 경로의 한 부분이라면 "컴포넌트", 완전한 주소의 구조를 유지하려면 "전체 URL", 공백을 +로 쓰는 application/x-www-form-urlencoded 데이터라면 "폼(+)"을 고릅니다.
- 입력 상자에 텍스트를 입력하거나 붙여넣으세요. 입력하는 대로 결과가 바뀝니다.
- "결과 복사"로 결과를 클립보드에 복사하거나, "서로 바꾸기"로 결과를 입력으로 옮기고 방향을 반대로 바꾸세요.
- 완전한 URL을 붙여넣으면 결과 아래의 "URL 분석"에서 각 부분과 디코딩한 쿼리 매개변수를 볼 수 있습니다.
기능
- 세 가지 인코딩 모드: 컴포넌트(encodeURIComponent), 전체 URL(encodeURI), 공백을 +로 쓰는 HTML 폼 인코딩을 지원합니다.
- 유니코드 완전 지원: 한글 같은 비라틴 문자와 이모지를 브라우저와 똑같이 UTF-8 바이트로 인코딩합니다.
- 명확한 오류 메시지: 디코딩에 실패하면 잘못된 % 시퀀스가 어디에 있는지, 또는 바이트가 올바른 UTF-8이 아닌지 알려 줍니다.
- URL 분석: 호스트, 포트, 경로, 프래그먼트와 모든 쿼리 매개변수를 디코딩한 형태로 보여 주며, 반복된 키도 모두 표시합니다.
- 개인정보 보호: 모든 처리가 브라우저 안에서 이루어지므로 토큰이나 개인 정보가 담긴 URL도 어디로도 전송되지 않습니다.
사용 예
검색어 인코딩하기
"coffee & cake"를 ?q=…의 값으로 넘기려면 "컴포넌트" 모드로 인코딩하세요. 결과는 coffee%20%26%20cake입니다. 인코딩하지 않으면 &가 새 매개변수의 시작으로 해석됩니다.
추적 링크 읽기
https://example.com/?redirect=https%3A%2F%2Fshop.example%2Fcart%3Fid%3D7 같은 긴 링크를 붙여넣으면 redirect 매개변수가 https://shop.example/cart?id=7로 디코딩되는 것을 볼 수 있습니다.
폼 데이터 디코딩하기
HTML 폼이 보낸 데이터는 name=Jane+Doe&city=S%C3%A3o+Paulo처럼 생겼습니다. "폼(+)" 모드로 디코딩하면 "name=Jane Doe&city=São Paulo"가 나옵니다.
제한 사항과 참고
- "전체 URL" 모드는 / ? # & = 같은 예약 문자를 인코딩하지 않으므로 매개변수 값 하나를 인코딩하는 데는 맞지 않습니다. 그럴 때는 "컴포넌트" 모드를 쓰세요.
- "전체 URL" 모드에서 "%2F"를 디코딩하면 %2F가 그대로 남습니다. decodeURI는 예약 문자를 일부러 이스케이프된 상태로 두기 때문입니다.
- 도구가 UTF-8 바이트를 기대하므로, ISO-8859-1이나 Shift_JIS 같은 오래된 인코딩으로 퍼센트 인코딩한 데이터는 디코딩할 수 없습니다.
- "URL 분석"은 https: 같은 스킴으로 시작하는 절대 URL에서만 동작합니다.
- 국제화 도메인 이름은 브라우저가 돌려주는 퓨니코드 형태(예: xn--…)로 표시됩니다.
자주 묻는 질문
encodeURI와 encodeURIComponent는 무엇이 다른가요?
encodeURIComponent는 URL에서 특별한 뜻을 가진 모든 문자를 이스케이프하므로 값 하나에 안전하게 쓸 수 있습니다. encodeURI는 완전한 URL이 계속 동작하도록 : / ? # & = 같은 문자를 그대로 둡니다. "컴포넌트" 모드와 "전체 URL" 모드가 각각 이 두 함수에 해당합니다.
공백은 %20인가요, +인가요?
실제로는 둘 다 쓰입니다. %20은 URL의 어디에서나 올바릅니다. + 기호는 HTML 폼 제출(application/x-www-form-urlencoded)의 쿼리 문자열에서만 공백을 뜻합니다. 그 형식을 다룰 때는 "폼(+)" 모드를 쓰세요.
"올바른 UTF-8 텍스트가 아닌" 바이트라는 오류가 나는 이유는 무엇인가요?
% 시퀀스의 문법은 맞지만, 그 시퀀스가 나타내는 바이트가 올바른 UTF-8 텍스트를 이루지 못한다는 뜻입니다. 예를 들어 %C3 뒤에 이어지는 바이트가 없는 경우입니다. 데이터가 다른 문자 집합으로 인코딩되었거나 중간에 잘렸을 수 있습니다.
URL이 서버로 전송되나요?
아닙니다. 인코딩, 디코딩, 분석은 이 페이지의 JavaScript가 처리합니다. 페이지를 불러온 뒤에는 인터넷 연결을 끊어도 도구가 계속 동작합니다.