URL 인코드와 디코드

주소, 쿼리 값, 폼 본문을 퍼센트 인코딩하거나 되돌립니다. 기본값 UTF-8은 encodeURIComponent와 같습니다. 상대가 EUC-KR처럼 다른 인코딩이면 문자 인코딩에서 바꾸세요.

세 가지 인코딩은 서로 다릅니다

경로의 슬래시는 남기고, 쿼리 값 안의 슬래시는 %2F가 되어야 합니다. 폼의 공백은 +, 보통 쿼리의 공백은 %20입니다. 통째로 같은 함수에 넣으면 링크가 다른 페이지를 엽니다.

  • 쿼리 값은 encodeURIComponent입니다. 검색어, 아이디, 돌아갈 주소에 씁니다.
  • 주소 전체는 encodeURI입니다. : / ? #는 남깁니다.
  • 폼 본문은 공백이 +입니다. POST 본문이지 링크가 아닙니다.

자주 틀리는 글자

값 안의 진짜 더하기는 %2B가 아니면 서버가 공백으로 읽습니다. &와 =도 값 안에서는 인코드해야 다음 파라미터가 시작하지 않습니다. 기본값 UTF-8은 encodeURIComponent와 같습니다. 한글은 바이트마다 %와 16진수 두 자리입니다. 상대가 EUC-KR이면 인코딩을 바꾸면 같은 글도 다른 퍼센트 열이 됩니다. Hex는 칸의 16진수 바이트를 퍼센트 인코딩합니다.

완성된 https://를 쿼리 값 방식으로 인코드하면 콜론과 슬래시까지 바뀌어 브라우저가 주소로 보지 않습니다. 조각마다 인코드한 뒤 이으세요. 바이트는 문자열을 바이트로, 다른 방식은 Base64입니다.

질문

공백이 +가 됐습니다

폼 본문을 고른 상태입니다. 링크라면 쿼리 값으로 바꾸세요.

되돌려도 %20이 남습니다

두 번 인코드됐습니다. 읽을 수 있을 때까지 한 번 더 디코드하세요.