0 lines
1
0 lines
1

이중 인코딩, %20 vs +, 다국어 URL 처리 등을 더 깊이 알고 싶다면 URL 인코딩 규칙과 함정 가이드를 참고하세요.

URL 인코딩이란?

URL 인코딩(퍼센트 인코딩, Percent-encoding)은 URL에서 사용할 수 없는 특수 문자를 %XX 형식의 16진수로 변환하는 표준 방식입니다. RFC 3986에 의해 정의되었으며, 공백은 %20으로, 한글은 UTF-8 바이트 단위로 각각 인코딩됩니다. 예를 들어 "가"는 UTF-8로 3바이트(EA B0 80)이므로 %EA%B0%80으로 변환됩니다.

URL에서 예약된 문자(:, /, ?, #, &, = 등)는 구조적 의미를 가지므로, 쿼리 파라미터 값에 포함될 때는 반드시 인코딩해야 합니다. 이 도구는 JavaScript의 encodeURIComponent()decodeURIComponent() 함수를 사용하여 브라우저 내에서 안전하게 처리합니다.

사용 방법

  1. 인코딩할 텍스트 또는 URL 파라미터 값을 입력합니다.
  2. 인코딩 버튼을 클릭하면 퍼센트 인코딩된 결과가 출력됩니다.
  3. 인코딩된 문자열을 붙여넣고 디코딩 버튼을 클릭하면 원본으로 복원됩니다.
  4. 복사 버튼으로 결과를 클립보드에 복사할 수 있습니다.

실무 활용 사례

API 쿼리 파라미터 — 검색어나 필터 값에 특수문자(공백, &, = 등)가 포함될 때, 인코딩하지 않으면 URL 구조가 깨집니다. 예: ?q=hello world?q=hello%20world

리다이렉트 URL 디버깅 — 서버 로그나 애널리틱스에서 인코딩된 URL을 디코딩하여 원본 경로와 파라미터를 확인할 수 있습니다.

SNS 공유 링크 — 소셜 미디어 공유 버튼의 URL 파라미터에 페이지 URL을 전달할 때 인코딩이 필요합니다. 예: https://twitter.com/share?url=https%3A%2F%2Fexample.com%2Fpage

이메일 캐페인 트래킹 — UTM 파라미터에 특수문자가 포함된 캠페인명을 사용할 때 인코딩이 필수입니다.

encodeURI vs encodeURIComponent

JavaScript는 두 가지 URL 인코딩 함수를 제공합니다. encodeURI()는 전체 URL을 인코딩하되, URL 구조 문자(:, /, ?, #, &)는 보존합니다. encodeURIComponent()는 쿼리 파라미터 값을 인코딩하며, 구조 문자도 모두 변환합니다. 이 도구는 encodeURIComponent()를 사용하므로, 파라미터 값을 인코딩하는 데 적합합니다.

사용 시 주의사항

전체 URL vs 파라미터 값 — 일반적으로 쿼리 파라미터 값만 인코딩해야 합니다. 전체 URL을 인코딩하면 ://이나 / 같은 구분자도 변환되어 URL이 작동하지 않습니다.

이중 인코딩 주의 — 이미 인코딩된 문자열을 다시 인코딩하면 %25가 반복적으로 생성됩니다(예: %20%2520). 인코딩 전에 원본 텍스트인지 확인하세요.

공백 인코딩 방식 — RFC 3986에서 공백은 %20으로 인코딩됩니다. HTML 폼의 application/x-www-form-urlencoded 형식에서는 +로 표현됩니다. 두 방식을 혼용하면 서버 측에서 디코딩 오류가 발생할 수 있습니다.

자주 묻는 질문

공백은 %20과 + 중 어떤 것으로 인코딩되나요?

URL 경로에서는 %20이 표준이고, HTML 폼 데이터(application/x-www-form-urlencoded)에서는 +가 표준입니다. 이 도구는 RFC 3986 표준에 따라 %20을 사용합니다. 서버 측 프레임워크에 따라 두 형식을 모두 처리하는 경우도 있습니다.

한글 URL은 왜 깨져 보이나요?

한글은 UTF-8로 인코딩되면 한 글자당 3바이트가 되어 %EA%B0%80 같은 형태가 됩니다. 이는 정상적인 동작이며, 최신 브라우저는 주소표시줄에서 자동으로 디코딩하여 한글로 표시합니다. 서버 로그나 API 응답에서는 인코딩된 형태로 나타날 수 있습니다.

전체 URL을 인코딩해도 되나요?

일반적으로 쿼리 파라미터 값만 인코딩해야 합니다. 전체 URL을 encodeURIComponent()로 인코딩하면 ://, /, ? 등 URL 구조 문자도 변환되어 URL이 작동하지 않습니다. 전체 URL을 안전하게 인코딩하려면 encodeURI()를 사용하세요.

이중 인코딩이란 무엇인가요?

이미 인코딩된 문자열을 다시 인코딩하는 것입니다. 예를 들어 %20(공백)이 %2520으로 변환됩니다. 서버에서 디코딩 시 원본이 아닌 %20이라는 문자열이 나오게 됩니다. 인코딩 전에 원본 텍스트인지 확인하세요.

입력한 데이터가 서버로 전송되나요?

아닙니다. 모든 처리는 브라우저 내에서 JavaScript의 encodeURIComponent()decodeURIComponent() 함수로 수행됩니다. 네트워크 요청이 발생하지 않으며, 개발자 도구의 Network 탭에서 확인할 수 있습니다.

광고 영역