URL 인코더
HTTP 요청, 쿼리 문자열 및 양식 데이터에서 전송할 수 있도록 URL 또는 개별 URI 구성 요소의 특수 문자를 퍼센트 인코딩합니다. RFC 3986을 따릅니다.
URL 쿼리 문자열의 공백 문자는 요청을 조용히 중단시킵니다. RFC 3986 (Uniform Resource Identifier: Generic Syntax)는 URL에서 안전한 문자와 퍼센트 인코딩해야 하는 문자를 정의합니다. 퍼센트 인코딩은 각 안전하지 않은 바이트를 % 다음에 두 개의 대문자 16진수 숫자로 대체합니다. 이 브라우저 기반 인코더는 데이터를 어디에도 전송하지 않고 즉시 RFC 3986을 적용합니다. 전체 URL 또는 개별 쿼리 매개변수 값을 인코딩하는 데 사용하여 매번 표준 준수 출력을 얻으세요.
URL 인코딩 방법
- 입력 필드에 URL 또는 텍스트를 붙여넣습니다.
- 안전하지 않은 문자만 인코딩하려면 전체 URL 모드를 선택하고, 구성 요소 모드를 선택하여
&및=를 포함한 모든 특수 문자를 인코딩합니다. - 퍼센트 인코딩된 출력이 결과 패널에 표시됩니다.
- 요청, 코드 또는 문서에서 사용할 수 있도록 인코딩된 문자열을 복사합니다.
퍼센트 인코딩 이해하기
RFC 3986 표준
RFC 3986 (IETF, 2005)는 URI에서 두 가지 문자 범주를 정의합니다. 비예약 문자 (A-Z a-z 0-9 - _ . ~)는 인코딩 없이 나타날 수 있습니다. 예약 문자 (: / ? # [ ] @ ! $ & ' ( ) * + , ; =)는 특별한 구조적 의미를 가지며 맥락에 따라 인코딩이 필요할 수도 있고 필요하지 않을 수도 있습니다. 그 외의 모든 문자 - 공백, 비ASCII 유니코드 및 이 세트에 포함되지 않는 문자 - 는 퍼센트 인코딩되어야 합니다.
encodeURI 대 encodeURIComponent
JavaScript는 두 가지 인코딩 함수를 제공합니다. encodeURI()는 전체 URL을 인코딩하고 예약 문자는 그대로 두어 구조적 역할을 수행하게 합니다. encodeURIComponent()는 구조적 문자도 인코딩하여 리터럴 데이터로 처리합니다 - 이는 &와 =가 URL 구문을 깨뜨릴 수 있는 개별 쿼리 매개변수 이름과 값에 적합합니다. 이 도구의 전체 URL 모드는 encodeURI에 해당하고, 구성 요소 모드는 encodeURIComponent에 해당합니다.
예시
입력
Hello World! @2024
출력 (구성 요소 모드)
Hello%20World!%20%402024
공백은 %20 (RFC 3986 표준)으로 인코딩되고; @는 %40로 변환됩니다. 느낌표는 일부 맥락에서 비예약 문자이며 모드에 따라 인코딩될 수도 있고 아닐 수도 있습니다.
일반적인 사용 사례
- 쿼리 매개변수 값 - URL에 추가하기 전에
&,=, 또는+가 포함된 값을 인코딩합니다. - 검색 엔진 쿼리 - 리디렉션 URL을 만들기 전에 사용자 검색 입력을 인코딩합니다.
- API 요청 구성 - 슬래시, 공백 또는 특수 문자가 포함된 경로 세그먼트를 인코딩합니다.
- OAuth 매개변수 - OAuth 1.0 서명 기본 문자열은 RFC 5849에 따라 퍼센트 인코딩이 필요합니다.
일반적인 실수
- 이중 인코딩 - 값이 이미 퍼센트 인코딩된 경우, 다시 인코딩하면
%자체가 인코딩되어%2520이 생성되고%20이 아닙니다. - 매개변수 값에 전체 URL 모드 사용 - 전체 URL 모드는
&와=를 인코딩하지 않아 쿼리 문자열 구문이 깨집니다; 매개변수 값에는 구성 요소 모드를 사용하세요. - 비ASCII 문자 잊기 - 비ASCII 텍스트는 먼저 UTF-8 바이트로 변환되어야 하며, 그 후 각 바이트가 개별적으로 퍼센트 인코딩됩니다.
과정을 되돌리려면 URL 디코더를 사용하세요. URL 쿼리 매개변수로 전송되는 이진 데이터의 경우, 먼저 Base64 인코더를 URL 안전 모드로 인코딩한 후 출력은 추가 퍼센트 인코딩 없이 이미 URL 안전합니다.
자주 묻는 질문
URL 인코딩과 Base64 인코딩의 차이는 무엇인가요?
퍼센트 인코딩은 안전하지 않은 문자를 %XX 16진수 시퀀스로 대체하고 안전한 문자는 그대로 유지하여 출력 길이가 입력과 비슷합니다. Base64는 모든 데이터를 64자 알파벳으로 변환하여 크기를 33% 증가시키지만 결과는 안전한 ASCII 문자만 포함합니다. 퍼센트 인코딩은 특정 문자를 URL 안전하게 만들고, Base64는 임의의 이진 데이터를 텍스트로 인코딩합니다.
JavaScript에서 encodeURI와 encodeURIComponent를 언제 사용해야 하나요?
encodeURI()는 전체 URL을 인코딩하는 데 사용되며, : / ? # & =와 같은 구조적 문자를 보존합니다. encodeURIComponent()는 URL 내부의 개별 값을 인코딩하며, 구조적 문자를 인코딩하여 URL 구문이 아닌 리터럴 데이터로 처리되도록 합니다. 의심스러울 경우, 사용자 제공 입력에 대해 encodeURIComponent()를 사용하세요.왜 어떤 인코더에서는 공백이 %20으로 변환되지만 다른 인코더에서는 +로 변환되나요?
%20은 공백에 대한 RFC 3986 퍼센트 인코딩이며 URI 경로 세그먼트와 쿼리 값에 대해 올바릅니다. 공백을 나타내는 + 기호는 application/x-www-form-urlencoded (HTML 양식 제출)에 특정하며, 이는 RFC 3986보다 먼저 존재했습니다. 두 가지 모두 각자의 맥락에서 유효하지만, %20은 HTML 양식 외부에서의 보편적인 표준입니다.URL 인코딩은 비ASCII 문자에도 작동하나요?
네. 비ASCII 문자는 먼저 UTF-8 바이트로 변환된 후, 각 바이트가 개별적으로 퍼센트 인코딩됩니다. 문자 ş (U+015F)는 %C5%9F로 변환됩니다. 중국어 문자 中 (U+4E2D)는 %E4%B8%AD로 변환됩니다. 현대의 브라우저와 서버는 모두 URL에서 비ASCII 문자를 위한 UTF-8 인코딩을 기대합니다.
이 도구를 사용할 때 내 URL 데이터가 귀하의 서버로 전송되나요?
아니요. 모든 인코딩은 브라우저에서 로컬로 실행되는 encodeURI() 또는 encodeURIComponent()를 사용합니다. URL, 쿼리 매개변수, 인증 토큰 및 붙여넣는 기타 데이터는 절대 우리의 서버로 전송되지 않습니다.