URL 인코딩
URL 인코딩·디코딩과 쿼리 파라미터 분해를 지원해요.
이럴 때 쓰세요
이렇게 사용하세요
결과가 예상과 다를 때
결과가 잘려 보여요
전체 결과는 복사 버튼으로 받을 수 있어요.
입력한 내용이 사라졌어요
이 기기에 자동 저장돼요. 브라우저 저장소를 지우면 함께 사라져요.
자주 하는 실수
- 주소 전체를 한 번에 인코딩하면 경로가 깨집니다. 슬래시와 콜론까지 이스케이프되면 서버가 경로로 인식하지 못해요. 경로와 값에 쓰는 규칙을 나누어 적용하세요.
- 쿼리 문자열의 덧셈 기호는 공백으로 읽힙니다. 검색창에 넣은 '즐거운+여행'은 '즐거운 여행'이 되지만, 정규 표현식 안에서는 같은 기호가 그대로 리터럴로 남습니다.
- 이미 인코딩된 값을 또 인코딩하면 퍼센트 기호가 %25로 늘어납니다. %20을 한 번 더 넣어 %2520으로 만들고 서버가 깨진 값으로 받아들이게 됩니다.
- 잘못된 이스케이프를 디코딩하면 예외가 납니다. %ZZ처럼 두 자리 16진수가 아니면 원래 문자열로 되돌릴 수 없습니다.
계산 근거
표준은 RFC 3986입니다. URI에서 의미가 있는 예약 문자는 그대로 두고 나머지 바이트를 퍼센트 기호 뒤에 두 자리 16진수로 씁니다. 자바스크립트의 encodeURIComponent은 영문과 숫자, 그리고 - _ . ! ~ * ' ( )만 남기고, encodeURI는 여기에 : / ? # $ , @ & = + ;까지 보존합니다. HTML 폼 전송 형식은 공백을 %20 대신 +로 씁니다.
실제로 계산해 보면
'즐거운 여행'을 인코딩하면?
%EC%A6%90%EA%B1%B0%EC%9A%B4%20%EC%97%AC%ED%96%89으로 48자입니다. UTF-8에서 한글 일곱 글자가 21바이트, 공백이 1바이트로 22바이트인데 한글 한 글자가 3바이트라 글자마다 9자, 공백은 3자가 됩니다.
'a b&c=d'와 'a+b'는 어떻게 달라지나요?
encodeURIComponent은 'a%20b%26c%3Dd'를 만듭니다. 폼 형식으로는 'a+b%26c%3Dd'처럼 공백이 +가 되고, &와 =는 각각 %26과 %3D로 보호됩니다.
쿼리 파라미터는 어떻게 떨어지나요?
?name=%EC%A6%90%EA%B1%B0%EC%9A%B4&age=30은 &를 구분자로 잘라 두 쌍이 됩니다. 각각을 퍼센트 디코딩하면 '즐거운'과 30이 나오고, +는 공백으로 바뀝니다.
더 궁금한 것
왜 URL-safe 알파벳을 쓰는 곳이 있나요?
토큰 형식(JWT)은 헤이더·페이로드·서명을 URL-safe Base64로 담습니다. 데이터는 빼기와 밑줄을 쓰고 문법은 마침표 세 글자만 허용합니다. 표준 Base64의 덧셈·슬래시·등호가 들어가면 쿼리 파라미터가 깨집니다.
한글이 들어간 주소가 시스템마다 다르게 보입니다.
퍼센트 인코딩이 URL의 표준 형태지만 서버마다 알파벳 대소문자 구분이나 디코딩 시점이 달라 같은 주소가 여러 모양으로 보일 수 있습니다. 정규화 규칙과 서버 설정이 각각 다르기 때문입니다.
파일명에 사용할 수 있는 문자는 어떻게 정하나요?
가장 안전한 건 영문 소문자와 숫자, 하이픈과 밑줄입니다. 공백은 %20이 되고, 한글과 괄호는 환경에 따라 그대로 인식될 때도 있어 링크가 깨집니다. 짧게 줄인 이름으로 바꾸는 편이 안전합니다.
알아둘 경계값
- 한글 한 글자는 인코딩 뒤 9자로 늘어요. 10자 제한 칸에 2자도 못 들어가니 결과 길이로 계산하세요.
- 이모지 하나는 12자로 늘어요. 4바이트라 한글보다 3자 더 차지해 제한 칸에서 빨리 차요.
- 디코딩 실패 안내는 Base64 확인을 말해요. 실제 원인은 퍼센트 형식 오류이니 뒤 두 자리를 먼저 보세요.
- 쿼리 분해는 http 포함 전체 주소에서만 돼요. 조각만 넣으면 오류 안내가 나오니 전체를 붙이세요.
- 같은 쿼리 키가 여러 개면 마지막 값만 남아요. 하나로 합쳐지니 원본을 따로 보관하세요.
- 느낌표·작은따옴표·괄호 등은 그대로 남아요. 서버가 엄격하면 이 문자까지 별도 처리해야 통과돼요.
결과를 믿기 전 확인 목록
- 값 부분만 인코딩했는지 결과에서 경로 구분자를 찾으세요. 슬래시까지 바뀌면 범위를 좁히세요.
- 리다이렉트 주소는 통째로 인코딩하세요. 엠퍼샌드 앞에서 잘리면 목적지가 깨져요.
- 분해 결과 키 개수가 쿼리와 맞는지 세세요. 같은 키 반복은 합쳐져 줄어요.
- 한글 주소는 표시와 인코딩 결과가 다른지 보세요. 보이는 주소와 전송 주소가 달라 복사 위치가 달라요.
- 폼 전송규격(덧셈 기호) 서버인지 확인하세요. 여기는 공백을 퍼센트 형식으로 쓰니 해석을 맞추세요.
- 길이 제한 칸에는 인코딩 뒤 길이를 재세요. 원문 글자 수로 판단하면 전송 단계에서 잘려요.
- 디코딩 전 퍼센트 기호 개수를 훑어보세요. 따옴표·공백 섞인 원문은 디코딩이 아니라 인코딩 대상이에요.
- 특수문자가 남았는지 느낌표·괄호를 검색하세요. 남은 문자가 서버에서 거부되면 별도 변환이 필요해요.
- 분해 결과를 코드에 붙이기 전 값을 따옴표 처리하세요. JSON 텍스트 그대로는 계산에 바로 못 써요.
자주 묻는 질문
한글 URL도 되나요?
네. encodeURIComponent 기준으로 한글·특수문자를 변환합니다.
+와 %20 중 뭘 쓰나요?
경로에는 %20, 쿼리 문자열에서는 +도 허용돼요. 이 도구는 encodeURIComponent 기준으로 %20을 씁니다.