사용 방법
- 인코딩 또는 디코딩을 선택하세요.
- 단일 값(예: 쿼리 매개변수 하나)에는 구성이 아닌 구성 요소 모드를, 전체 주소에는 전체 URL 모드를 선택하세요.
- 텍스트를 입력하거나 붙여 넣으세요. 결과가 오른쪽에 표시됩니다. 휴대전화에서는 아래에 표시됩니다.
- 결과를 복사하거나 “출력을 입력으로 사용”을 눌러 작업을 반대로 수행하고 변환 결과를 확인하세요.
작동 방식
URL에는 제한된 ASCII 문자만 사용할 수 있습니다. 공백, 악센트가 있는 문자, 이모지를 비롯한 나머지 문자는 퍼센트 이스케이프 형식으로 표기합니다. 문자를 UTF-8 바이트로 변환한 다음, 각 바이트를 %와 두 자리 16진수로 나타냅니다. 공백은 %20, é는 %C3%A9, €는 %E2%82%AC가 됩니다.
구성 요소 모드는 JavaScript의 encodeURIComponent와 decodeURIComponent를 사용합니다. / ? # & = + : @를 포함해 URL에서 특별한 의미가 있는 문자를 모두 이스케이프하므로, 결과를 쿼리 값이나 단일 경로 세그먼트 안에 안전하게 넣을 수 있습니다. A–Z, a–z, 0–9 및 - _ . ! ~ * ' ( )만 변환하지 않습니다.
전체 URL 모드는 encodeURI와 decodeURI를 사용합니다. 입력값을 완전한 URL로 간주하고 예약 문자인 ; , / ? : @ & = + $ #는 그대로 둡니다. 따라서 주소가 계속 올바르게 작동합니다. 디코딩할 때도 decodeURI는 이러한 예약 문자의 이스케이프를 그대로 둡니다. %2F는 /로 바꾸면 URL의 의미가 달라지므로 %2F로 유지됩니다.
폼 데이터 옵션은 브라우저가 HTML 양식을 제출할 때 사용하는 형식인 application/x-www-form-urlencoded를 따릅니다. 이 형식에서는 공백을 %20 대신 +로 표기합니다. 이 옵션으로 디코딩하면 모든 +가 공백으로 바뀌므로, 실제 더하기 기호는 %2B로 표기해야 합니다.
잘못된 입력도 버리지 않습니다. % 뒤에 16진수 두 자리가 오지 않거나 이스케이프 시퀀스가 유효한 UTF-8을 이루지 않으면 문제가 있는 위치를 표시하고 텍스트를 그대로 유지해 수정할 수 있습니다.
예시
쿼리 문자열에 값 넣기
https://example.com/search?q=…에서 “Rock & Roll”을 검색하려면 구성 요소 모드에서 값만 인코딩하세요. 결과는 Rock%20%26%20Roll입니다. 인코딩하지 않으면 &가 q 매개변수를 끝내고 “ Roll”이라는 새 매개변수를 시작합니다.
공백과 악센트가 포함된 URL 수정하기
전체 URL 모드에서 https://example.com/menu/crème brûlée.html은 https://example.com/menu/cr%C3%A8me%20br%C3%BBl%C3%A9e.html로 바뀝니다. 슬래시와 콜론은 그대로 유지되므로 링크가 계속 작동합니다.
로그에 기록된 폼 데이터 읽기
서버 로그에 name=Jane+Doe&city=S%C3%A3o+Paulo가 표시됩니다. “+를 공백으로 처리”를 켜고 구성 요소 모드에서 디코딩하면 name=Jane Doe&city=São Paulo로 읽을 수 있습니다.
자주 묻는 질문
encodeURI와 encodeURIComponent의 차이는 무엇인가요?
encodeURIComponent는 URL 부분을 구분하는 문자(/ ? # & = + : @ 등)를 이스케이프하므로 URL의 한 부분에 사용합니다. encodeURI는 이러한 문자를 그대로 두므로 전체 URL에 사용합니다. 쿼리 값에 encodeURI를 사용하는 것은 흔한 실수입니다. 값 안의 &나 =가 이스케이프되지 않아 쿼리 문자열이 깨질 수 있습니다.
공백은 %20으로 써야 하나요, +로 써야 하나요?
URL 경로에서 공백은 항상 %20으로 표기합니다. 쿼리 문자열에서는 두 형식이 모두 사용됩니다. %20은 어디서나 유효하지만, +는 폼 인코딩 데이터(application/x-www-form-urlencoded)에서만 공백을 뜻합니다. HTML 양식과 여러 서버 프레임워크는 쿼리 문자열을 이 형식으로 읽습니다. 확실하지 않다면 %20을 사용하세요.
디코딩할 때 오류가 발생하는 이유는 무엇인가요?
% 기호 뒤에 16진수 두 자리가 오지 않거나(예: “50% off”), 이스케이프된 바이트가 유효한 UTF-8이 아니면 디코딩에 실패합니다. 이는 대개 Latin-1과 같은 이전 문자 인코딩으로 텍스트를 인코딩했을 때 발생합니다(é를 %C3%A9 대신 %E9로 표기). 오류 메시지에 문제가 발생한 위치가 표시됩니다.
전체 URL 모드에서 %2F가 슬래시로 바뀌지 않는 이유는 무엇인가요?
decodeURI는 / ? # & =와 같은 예약 문자의 이스케이프를 의도적으로 그대로 둡니다. 이 문자를 디코딩하면 URL이 여러 부분으로 나뉘는 방식이 달라질 수 있기 때문입니다. 모든 이스케이프를 디코딩하려면 구성 요소 모드를 사용하세요.
인코딩되지 않는 문자는 무엇인가요?
두 모드 모두 A–Z, a–z, 0–9 및 - _ . ! ~ * ' ( )는 변환하지 않습니다. 전체 URL 모드에서는 ; , / ? : @ & = + $와 #도 변환하지 않습니다.
개인정보 보호
인코딩과 디코딩은 브라우저에 내장된 JavaScript 함수로 처리됩니다. 텍스트와 URL은 업로드되거나 저장되지 않으며 분석 데이터에도 포함되지 않습니다.