encodeURI: 위 문자에 더해 주소 구조 문자 ; , / ? : @ & = + $ #
폼 형식: 영문자, 숫자, * - . _ (공백은 +)
자주 묻는 질문
encodeURIComponent와 encodeURI는 언제 각각 쓰나요?
쿼리 값 하나나 경로 조각 하나를 넣을 때는 encodeURIComponent를 씁니다. & = ? / # 까지 모두 인코딩해 값 안의 특수문자가 주소 구조를 깨지 않게 합니다. 이미 완성된 주소 전체에서 한글·공백만 바꾸고 싶을 때는 encodeURI를 씁니다. 값에 encodeURI를 쓰면 & 나 = 가 그대로 남아 파라미터가 잘못 나뉠 수 있습니다.
공백은 %20인가요, +인가요?
주소의 경로나 encodeURIComponent 결과에서는 %20입니다. HTML 폼을 전송할 때 쓰는 application/x-www-form-urlencoded 형식에서만 공백을 + 로 씁니다. 그래서 쿼리 문자열을 해석할 때는 + 를 공백으로 읽어야 하고, 값에 들어 있는 진짜 + 는 %2B로 인코딩해야 합니다.
"URIError: URI malformed" 오류는 왜 나나요?
decodeURIComponent에 % 뒤 16진수 2자리가 아닌 값(예: 100%)이 있거나, %ED%95처럼 한글 한 글자의 바이트가 중간에 잘린 값을 넣으면 납니다. 이 도구는 문제가 된 % 의 위치와 이유를 알려 주고, 쿼리 표에서는 잘못된 항목만 표시하고 나머지는 계속 해석합니다.
한글 한 글자가 왜 %EC%84%9C처럼 세 덩어리가 되나요?
주소는 UTF-8 바이트를 %XX 형태로 적는데, 한글 음절은 UTF-8에서 3바이트이기 때문입니다. 이모지는 4바이트라 %F0%9F%98%80처럼 네 덩어리가 됩니다.
오래된 사이트 주소의 %BC%AD%BF%EF 같은 값은 디코딩이 안 돼요.
그 값은 UTF-8이 아니라 EUC-KR(완성형)로 인코딩된 한글입니다. 이 도구는 현재 웹 표준인 UTF-8만 해석하므로 "올바른 UTF-8이 아닙니다"라고 표시합니다.