RevealTheme logo

URL 인코더 및 디코더

텍스트를 URL에 안전한 인코딩(퍼센트 인코딩)으로, 그리고 그 반대로 변환합니다. 쿼리 문자열, 리디렉션, OAuth 흐름에 유용합니다.

URL 인코딩이란 무엇이며 언제 필요한가요?

URL 인코딩('퍼센트 인코딩'이라고도 하며 RFC 3986에 명시됨)은 URL에서 특별한 의미를 가지는 문자, 또는 URL에서 그대로 사용하기에 안전하지 않은 문자를 '%XX' 형식의 16진수 이스케이프 시퀀스로 변환하는 과정입니다. URL 사양은 구조적 의미를 가지는 특정 문자를 예약합니다. '?'는 쿼리 문자열을 시작하고, '#'은 프래그먼트를 시작하며, '&'는 쿼리 매개변수를 구분하고, '/'는 경로 세그먼트를 구분하는 식입니다. 사용자 입력에 이러한 문자가 포함되어 있는데 이를 그대로 URL에 삽입하면 파서가 잘못 해석합니다. URL 인코딩은 각 예약 문자 또는 안전하지 않은 문자를 '%'가 앞에 붙은 16진수 바이트 표현으로 대체하여 이를 방지합니다. 공백은 %20이 되고, '&'는 %26이, '='는 %3D가 됩니다. 비ASCII 문자(키릴 문자, 중국어, 이모지)는 여러 바이트의 UTF-8 시퀀스로 변환되며, 각 바이트가 퍼센트 인코딩됩니다. 브라우저는 링크를 클릭할 때 이를 자동으로 처리하지만, 코드로 URL을 구성할 때마다(검색 쿼리, 리디렉션 대상, OAuth 콜백 또는 웹훅 서명을 만들 때) 사용자가 제공한 값을 먼저 인코딩해야 합니다. 이 도구는 JavaScript 코드에서 사용하는 것과 동일한 encodeURIComponent / decodeURIComponent 함수를 사용하므로, 동작이 프로덕션과 정확히 일치합니다.

일반적인 사용 사례

  • 사용자의 검색어를 검색 URL에 추가하기 전에 인코딩하세요(?q=사용자+입력).

  • OAuth redirect_uri 매개변수를 인증 서버에 안전하게 전달하세요.

  • 쿼리 문자열에 인코딩된 JSON 페이로드를 포함하는 웹훅 URL을 구성하세요.

  • 'returnTo' URL이 다른 URL을 거쳐 전달되어도 유지되도록 인코딩하세요.

  • 폼을 제출한 후 주소 표시줄에 보이는 인코딩된 값을 디코딩하세요.

  • 잘못된 형식의 URL이 어떻게 파싱되는지 테스트하세요: 특수 문자를 인코딩하고 무슨 일이 일어나는지 관찰하세요.

자주 묻는 질문

URL을 언제 인코딩해야 하나요?
사용자가 제공한 값을 URL에 넣기 전에는 항상 인코딩하세요: 쿼리 매개변수, 경로 세그먼트 또는 프래그먼트. 인코딩하지 않는 것은 미묘한 버그의 가장 흔한 원인 중 하나입니다. '고양이 & 개'라는 값은 'gatos%20%26%20perros'와 같이 인코딩되기 전까지는 쿼리 문자열을 망가뜨립니다.
encodeURI와 encodeURIComponent의 차이는 무엇인가요?
encodeURI는 전체 URL을 위한 것입니다: '/', '?', '&', '='와 같은 구조적 문자는 URL에서 의미를 가지므로 그대로 둡니다. encodeURIComponent는 URL의 부분(쿼리 값, 경로 세그먼트)을 위한 것입니다: 영숫자가 아닌 모든 것을 인코딩합니다. 개별 쿼리 값에는 encodeURIComponent를 사용하세요. 사용자가 제공한 쿼리 값에는 절대 encodeURI를 사용하지 마세요('&'를 이스케이프하지 않아 쿼리 문자열을 망가뜨립니다).
URL에 안전한 Base64와 URL 인코딩의 차이는 무엇인가요?
이들은 서로 다른 개념입니다. URL 인코딩(이 도구)은 특수 문자를 문자 단위로 대체합니다. URL에 안전한 Base64는 '+'와 '/' 대신 '-'와 '_'를 사용하는 Base64의 변형으로, 그 결과가 추가 인코딩 없이도 이미 URL에 안전합니다.
왜 때때로 '+'가 공백으로 디코딩되나요?
application/x-www-form-urlencoded(폼 제출)에서는 '+'가 공백의 약어입니다. 대부분의 디코더는 이를 유지합니다. 최신 URI 파싱에서는 '%20'이 공백의 올바른 인코딩입니다. decodeURIComponent는 '+'를 문자 그대로의 '+'로 취급합니다. '+'를 공백으로 변환하려면 decodeURI 또는 폼 디코더를 사용하세요.
비ASCII 문자는 어떻게 인코딩되나요?
먼저 UTF-8 바이트로 변환된 다음 각 바이트가 퍼센트 인코딩됩니다. 그래서 'café'는 'caf%C3%A9'가 됩니다: 'é'는 두 개의 UTF-8 바이트(0xC3 0xA9)입니다. 이 도구는 UTF-8을 올바르게 처리합니다. 일부 오래된 도구는 Latin-1을 사용하여 인코딩하므로 다른 출력을 생성합니다.
URL 인코딩은 HTML 엔티티 인코딩과 같은 것인가요?
아닙니다. URL 인코딩(%XX)은 URL을 위해 문자를 이스케이프합니다. HTML 엔티티 인코딩(&, <)은 HTML 마크업을 위해 문자를 이스케이프합니다. 두 컨텍스트는 다르며, 한 컨텍스트에 다른 컨텍스트의 인코딩을 적용하는 것은 흔한 XSS 오류입니다.

관련 도구