URL 인코더 · 디코더 (URL Encoder & Decoder)
URL을 실시간 인코딩·디코딩하고 내장 파서로 구조를 분석합니다. encodeURI와 encodeURIComponent 모드를 온라인에서 지원하며 데이터는 브라우저를 떠나지 않습니다.
우리 팀은 RFC 3986 기준으로 URL 인코딩·디코딩을 검증하고 보조 문자 및 이모지를 포함한 모든 유니코드 평면에서 UTF-8 처리가 올바른지 테스트합니다.
URL 인코딩(퍼센트 인코딩)이란 무엇인가요?
URL 인코딩은 정식으로 퍼센트 인코딩이라고 부르며, 허용되지 않거나 특별한 의미를 가진 문자를 URI(Uniform Resource Identifier)에서 표현하기 위해 RFC 3986에 정의된 방식입니다. 안전하지 않은 각 바이트를 퍼센트 기호(%) 뒤에 16진수 두 자리를 붙인 형태로 변환합니다. 예를 들어 공백은 %20, 앰퍼샌드는 %26이 되고, 한자 中은 UTF-8 바이트 3개가 각각 퍼센트 인코딩되어 %E4%B8%AD가 됩니다.
URL은 ASCII 문자 집합의 일부만 포함할 수 있습니다. 알파벳, 숫자, 소수의 기호(-, _, ., ~)는 'unreserved'로 간주되어 그대로 나타날 수 있습니다. 공백, 구두점, 유니코드 전 범위를 포함한 나머지 문자는 URL에서 안전하게 전송되도록 퍼센트 인코딩되어야 합니다. ?, &, =, # 같은 reserved 문자는 URL 구문에서 구조적 구분자 역할을 하므로 구분자가 아니라 데이터로 사용할 때는 역시 인코딩해야 합니다.
퍼센트 인코딩은 웹 곳곳에서 필수적입니다. 브라우저는 폼 제출을 인코딩하고, API는 인코딩된 쿼리 파라미터를 요구하며, OAuth 흐름은 올바르게 인코딩된 리다이렉트 URI에 의존하고, 국제화 도메인 이름은 비-ASCII 문자 인코딩에 의지합니다. 인코딩을 잘못하면 링크가 깨지거나 오픈 리다이렉트 같은 보안 취약점이 생기거나 데이터가 손상됩니다.
이 도구는 encodeURI와 encodeURIComponent 두 모드, 내장 URL 구조 파서, 실시간 변환, 이중 인코딩 감지 기능을 제공하며 모든 동작은 브라우저 내부에서 비공개로 실행됩니다.
URL 인코딩은 다른 웹 개발 도구와 함께 자주 사용됩니다. JWT 토큰이나 API 페이로드에 포함하기 위해 URL을 Base64로 인코딩하거나, URL 문자열이 포함된 JSON 데이터를 포매팅해 구조를 확인해야 할 수 있습니다. 퍼센트 인코딩의 작동 방식을 바이트 수준으로 깊이 다룬 설명은 개발자를 위한 URL 인코딩 완전 가이드를 읽어 보십시오.
QR 코드에 넣기 위해 URL을 인코딩하려는 건가요? QR 코드 생성기를 활용해 보세요 — 너무 긴 URL은 QR의 바이트 한도를 넘을 수 있으니 여기서 먼저 다듬어 두는 편이 안전합니다.
// Encode a query parameter value
const param = encodeURIComponent('hello world & goodbye');
console.log(param); // → 'hello%20world%20%26%20goodbye'
// Encode a full URL (preserves structure)
const url = encodeURI('https://example.com/path name?q=hello world');
console.log(url); // → 'https://example.com/path%20name?q=hello%20world'
// Decode a percent-encoded string
const decoded = decodeURIComponent('hello%20world%20%26%20goodbye');
console.log(decoded); // → 'hello world & goodbye'
// Build a URL with encoded parameters
const base = 'https://api.example.com/search';
const query = `?q=${encodeURIComponent('你好')}&lang=zh`;
console.log(base + query); // → 'https://api.example.com/search?q=%E4%BD%A0%E5%A5%BD&lang=zh' 주요 기능
듀얼 인코딩 모드
URL 구조를 보존하는 encodeURI와 파라미터 값용으로 모든 문자를 인코딩하는 encodeURIComponent 사이를 전환하여 용도에 정확히 맞춥니다.
내장 URL 파서
URL을 프로토콜, 호스트, 포트, 경로, 쿼리 파라미터, 조각으로 자동 분해합니다. 각 필드는 편집 가능하며 새 URL로 재구성할 수 있습니다.
실시간 변환
입력과 동시에 인코딩하고 디코딩합니다. 버튼을 누를 필요 없이 결과가 반대편 영역에 즉시 표시됩니다.
100% 브라우저 기반
모든 처리는 네이티브 JavaScript API를 사용해 브라우저 내부에서 로컬로 이루어집니다. 서버 업로드도 추적도 없으며 데이터가 기기를 떠나지 않습니다.
완전한 UTF-8 지원
올바른 UTF-8 바이트 인코딩과 디코딩을 통해 한국어, 중국어, 일본어, 아랍어, 이모지 등 어떤 유니코드 텍스트도 정확히 처리합니다.
이중 인코딩 감지
%2520(이미 인코딩된 %20의 재인코딩) 같은 이중 인코딩 문제를 자동으로 감지하고 경고하여 가장 흔한 URL 인코딩 실수를 예방합니다.
예시
깨진 URL 디코딩
https%3A%2F%2Fexample.com%2Fsearch%3Fq%3Dhello%20world%26lang%3Den
https://example.com/search?q=hello world&lang=en
완전히 퍼센트 인코딩된 URL을 사람이 읽을 수 있는 형태로 디코딩하여 원래 쿼리 파라미터와 구조를 확인합니다
한자 문자
https://example.com/search?q=你好世界
https://example.com/search?q=%E4%BD%A0%E5%A5%BD%E4%B8%96%E7%95%8C
한자는 UTF-8 바이트 시퀀스로 변환된 뒤 퍼센트 인코딩됩니다
쿼리 파라미터
https://example.com/api?name=홍길동&role=admin&lang=ko&sort=date desc
https://example.com/api?name=%ED%99%8D%EA%B8%B8%EB%8F%99&role=admin&lang=ko&sort=date%20desc
쿼리 파라미터 값의 공백과 특수 문자는 URL 구조를 유지한 채 퍼센트 인코딩됩니다
전체 URL
https://user:pass@example.com:8080/path/to/page?key=value&arr[]=1#section-2
https://user:pass@example.com:8080/path/to/page?key=value&arr%5B%5D=1#section-2
자격 증명, 포트, 경로, 대괄호가 포함된 쿼리 파라미터, 조각 식별자를 모두 포함한 전체 URL 예시
OAuth 리다이렉트 URI
https://auth.example.com/authorize?redirect_uri=https://myapp.com/callback?code=abc&state=xyz
https://auth.example.com/authorize?redirect_uri=https%3A%2F%2Fmyapp.com%2Fcallback%3Fcode%3Dabc%26state%3Dxyz
redirect_uri 값 자체가 전체 URL이므로 그 특수 문자가 바깥 URL의 일부로 해석되지 않도록 인코딩해야 합니다
사용 방법
- 1
URL 또는 인코딩된 문자열 입력
디코딩된 영역에 URL을 붙여넣어 인코딩하거나, 인코딩된 영역에 퍼센트 인코딩 문자열을 붙여넣어 디코딩하십시오. 용도에 따라 encodeURI 또는 encodeURIComponent 모드를 선택하십시오.
- 2
결과와 파싱된 구조 확인
입력과 동시에 반대편 영역이 즉시 갱신됩니다. URL 파서는 URL을 프로토콜, 호스트, 포트, 경로, 쿼리 파라미터, 조각으로 나누며 모두 편집 가능합니다.
- 3
복사 또는 재구성
복사를 눌러 인코딩되거나 디코딩된 결과를 복사합니다. 개별 URL 구성 요소를 편집한 뒤 재구성을 누르면 수정된 부분으로 새 URL을 만들 수 있습니다.
흔한 오류
이중 인코딩(%20 대신 %2520)
이중 인코딩은 이미 인코딩된 URL을 다시 인코딩할 때 발생합니다. %20의 %가 %25로 인코딩되면서 %20이 %2520이 됩니다. 이렇게 되면 서버가 공백이 아닌 %20 문자열 그대로를 보게 되어 URL이 깨집니다.
https://example.com/path%2520with%2520spaces
https://example.com/path%20with%20spaces
경로 세그먼트에서 공백을 +로 인코딩
+ 문자는 application/x-www-form-urlencoded 형식(HTML 폼 쿼리 문자열)에서만 공백을 의미합니다. URL 경로 세그먼트에서 +는 공백이 아니라 문자 그대로의 더하기 기호로 해석됩니다. 경로 세그먼트의 공백에는 항상 %20을 사용하십시오.
https://example.com/my+file+name.pdf
https://example.com/my%20file%20name.pdf
쿼리 파라미터 값에 encodeURI 사용
encodeURI()는 &, =를 비롯한 reserved 문자를 인코딩하지 않으므로, 이런 문자가 포함된 파라미터 값에 사용하면 쿼리 문자열 구조가 망가집니다.
encodeURI('key=value&more') → 'key=value&more' (& not encoded!) encodeURIComponent('key=value&more') → 'key%3Dvalue%26more' UTF-8이 아닌 인코딩 가정
일부 레거시 시스템은 URL 파라미터에 Latin-1이나 Shift-JIS 같은 인코딩을 사용합니다. 현대 표준은 UTF-8을 요구합니다. Shift-JIS로 인코딩된 파라미터를 UTF-8 디코더로 디코딩하면 깨진 텍스트가 나옵니다.
Decoding %82%B1%82%F1 as UTF-8 (this is Shift-JIS for こん)
Using UTF-8: %E3%81%93%E3%82%93 correctly decodes to こん
맥락 없이 상대 경로 인코딩
../images/photo.jpg 같은 상대 경로를 encodeURIComponent로 인코딩하면 슬래시와 점이 퍼센트 인코딩 시퀀스가 되어 경로 구조가 깨집니다. encodeURI()를 사용하거나 개별 경로 세그먼트만 인코딩하십시오.
encodeURIComponent('../images/photo.jpg') → '..%2Fimages%2Fphoto.jpg' Encode each segment: '../images/' + encodeURIComponent('my photo.jpg') 일반적인 활용 사례
- 깨진 URL 디버깅
- 서버 로그, 오류 메시지, 브라우저 개발자 도구의 퍼센트 인코딩된 URL을 디코딩해 원래 사람이 읽을 수 있는 텍스트로 확인합니다.
- API 개발
- REST API 호출의 쿼리 파라미터 값을 인코딩하여 &, =, 공백 같은 특수 문자가 요청 URL을 깨뜨리지 않도록 합니다.
- OAuth 흐름 설정
- OAuth 인증 URL의 redirect_uri 등 URL 파라미터를 적절히 인코딩하여 인증 실패를 예방합니다.
- 국제화 URL
- 한국어, 중국어, 일본어, 아랍어 등 비-ASCII 문자가 포함된 URL을 국제화된 웹 애플리케이션용으로 인코딩·디코딩합니다.
- 마케팅 링크 분석
- 이메일 캠페인과 광고 플랫폼의 추적 URL을 디코딩하여 포함된 UTM 파라미터와 리다이렉트 체인을 파악합니다.
- URL 구조 검사
- 복잡한 URL을 프로토콜, 호스트, 포트, 경로, 쿼리 파라미터, 조각 구성 요소로 파싱하여 분석하고 수정합니다.
기술 세부사항
- RFC 3986의 reserved와 unreserved 문자
- RFC 3986은 절대로 인코딩할 필요가 없는 unreserved 문자(A-Z, a-z, 0-9, -, ., _, ~)와 URI 구분자 역할을 하는 reserved 문자(:, /, ?, #, [, ], @, !, $, &, ', (, ), *, +, ,, ;, =)를 정의합니다. reserved 문자는 데이터로 사용될 때는 퍼센트 인코딩되어야 합니다.
- UTF-8 바이트 인코딩 흐름
- 비-ASCII 문자는 먼저 유니코드 코드 포인트로 변환된 뒤 UTF-8 바이트(코드 포인트 범위에 따라 1-4바이트)로 인코딩되고, 마지막으로 각 바이트가 %XX로 퍼센트 인코딩됩니다. 예: é(U+00E9) → UTF-8 바이트 C3 A9 → %C3%A9. 이모지 🎉(U+1F389) → UTF-8 바이트 F0 9F 8E 89 → %F0%9F%8E%89.
- URL과 URI 용어
- URI(Uniform Resource Identifier)는 임의의 식별자 문자열을 가리키는 일반 용어입니다. URL(Uniform Resource Locator)은 https://처럼 접근 방법도 함께 명시하는 URI입니다. RFC 3986의 인코딩 규칙은 모든 URI에 적용됩니다. JavaScript API는 URI 용어(encodeURI, decodeURI)를 따르며 일상에서는 URL 용어가 더 흔합니다.
모범 사례
- 용도에 맞는 모드 사용
- 개별 쿼리 파라미터 키와 값에는 encodeURIComponent()를 사용하십시오. encodeURI()는 전체 URL이 있고 구조를 깨뜨리지 않으면서 안전하지 않은 문자만 인코딩하고 싶을 때만 사용하십시오. &, =를 비롯한 reserved 문자가 포함될 수 있는 파라미터 값에는 encodeURI()를 절대 사용하지 마십시오.
- 이중 인코딩 피하기
- 문자열을 인코딩하기 전에 이미 인코딩되었는지 확인하십시오. 기존 % 시퀀스가 있는지 살펴보십시오. 이미 인코딩된 문자열을 또 인코딩하면 %20이 %2520이 되고 %3D가 %253D가 됩니다. 확신이 없다면 먼저 디코딩한 뒤 한 번만 인코딩하십시오.
- 서버 측 디코딩
- 대부분의 웹 프레임워크는 애플리케이션 코드가 값을 받기 전에 URL 파라미터를 자동으로 디코딩합니다. 프레임워크가 이미 디코딩한 파라미터를 수동으로 또 디코딩하지 마십시오. 원본 값에 퍼센트 시퀀스가 들어 있으면 문제가 생길 수 있습니다.
- OAuth와 API 서명을 위한 값 인코딩
- OAuth 1.0 서명 기반 문자열과 많은 API 서명 알고리즘은 엄격한 RFC 3986 퍼센트 인코딩을 요구합니다. encodeURIComponent()를 사용한 뒤 해당 함수가 인코딩하지 않는 문자(!, ', (, ), *)를 명세가 요구하면 직접 퍼센트 인코딩 등가물로 치환하십시오.
자주 묻는 질문
URL 인코딩은 무엇이며 왜 필요한가요?
encodeURI와 encodeURIComponent의 차이는 무엇인가요?
URL 인코딩은 HTML 인코딩과 같은가요?
curl 명령에서 URL이 깨지는 이유는 무엇인가요?
한자가 URL에서 %E4%B8%AD 같은 문자열로 바뀌는 이유는 무엇인가요?
OAuth redirect_uri 파라미터도 인코딩해야 하나요?
Node.js querystring과 URLSearchParams의 차이는 무엇인가요?
Python, JavaScript, Java에서 URL은 어떻게 인코딩하나요?
URL 인코딩에서 인코딩되지 않는 문자는 무엇인가요?
공백을 인코딩할 때 +와 %20의 차이는 무엇인가요?
URL 인코딩은 이모지를 어떻게 처리하나요?
URL 인코딩을 암호나 보안 용도로 사용할 수 있나요?
URL의 최대 길이는 얼마인가요?
URL과 URI의 차이는 무엇인가요?
관련 도구
모든 도구 보기 →Base64 디코더 · 인코더 (Base64 Decoder & Encoder)
인코딩 & 포매팅
Base64를 온라인에서 무료로 인코딩하고 디코딩합니다. UTF-8과 이모지를 완벽 지원하는 실시간 변환으로, 100% 브라우저에서 처리되어 회원 가입이 필요 없습니다.
Base64 이미지 변환기 (온라인)
인코딩 & 포매팅
Base64 문자열이나 데이터 URI를 온라인 브라우저에서 이미지로 디코딩합니다. 미리보고, 치수와 MIME을 읽은 뒤 PNG, JPG, GIF, SVG로 다운로드하세요. 업로드 없음.
CSV to JSON 변환기 (CSV to JSON Converter)
인코딩 & 포매팅
브라우저에서 CSV를 JSON으로 변환합니다. RFC 4180, 타입 추론, 헤더 행, 큰 정수 안전 처리. 100% 비공개, 업로드 없음.
.env을 JSON으로 변환하는 도구
인코딩 & 포매팅
.env 파일을 붙여넣으면 즉시 JSON으로 변환됩니다. 데이터베이스 비밀번호, API 키, 토큰이 브라우저를 절대 벗어나지 않는 100% 비공개 무료 온라인 dotenv 파서입니다.
무료 HTML 엔티티 디코더 — HTML 언이스케이프
인코딩 & 포매팅
온라인에서 HTML 엔티티를 디코딩하고 HTML을 언이스케이프하세요. 무료, 가입 불필요, 100% 브라우저에서 처리. 이름·10진수·16진수 참조를 문자로 되돌리며 업로드 없음.
무료 HTML 엔티티 인코더 — HTML 이스케이프
인코딩 & 포매팅
온라인에서 HTML 엔티티를 인코딩하고 특수문자(< > & " ')를 이스케이프하세요. 무료, 100% 브라우저에서 처리. 이름·10진수·16진수 출력, 업로드 없음.