URL 인코딩
Highlight는 비율 바이트 코덱입니다.
무료 온라인 URL 인코딩/디코딩 도구. encodeURIComponent / encodeURI / RFC 3986 네 가지 인코딩 모드를 지원합니다. 이스케이프된 문자를 실시간으로 하이라이트 표시하며, 배치 모드는 여러 줄 처리를 지원하고, Query Only는 매개변수 값만 인코딩합니다. 브라우저 로컬 처리로 데이터는 업로드되지 않습니다.
관련 추천
URL 인코딩이란 무엇인가요?
URL 인코딩(퍼센트 인코딩)은 URL의 비안전 문자를 %XX 형식으로 변환하는 과정입니다. URL에는 ASCII 문자의 일부(영문자, 숫자, -_.~)만 포함할 수 있으며 다른 모든 문자(중국어, 공백, 특수 기호 포함)는 URL에서 전송하기 전에 인코딩해야 합니다. 예를 들어 공백은 %20, 중국어 '中'은 %E4%B8%AD으로 인코딩됩니다.
**encodeURIComponent vs encodeURI**: 가장 많이 사용되는 두 가지 인코딩 함수입니다. encodeURIComponent는 &, =, ? 등 매개변수 구분자를 포함하여 가장 철저하게 인코딩하므로 개별 매개변수 값 인코딩에 적합합니다. encodeURI는 URL 구조(프로토콜://, 경로, /, ?, #)를 보존하므로 전체 URL 인코딩에 적합합니다. 혼용하면 매개변수 파싱 오류가 발생할 수 있습니다.
**RFC 3986 vs 구 표준**: RFC 3986은 물결표 ~를 안전한 문자로 취급하여 인코딩하지 않지만 초기 표준에서는 %7E로 인코딩됩니다. RFC 3986을 사용하면 불필요한 이스케이프가 줄어들어 URL 가독성이 향상되고 일부 서버의 %7E 파싱 문제도 피할 수 있습니다.
**Query Only 모드**: URL의 쿼리 매개변수 값만 인코딩하고 키 이름, 등호, & 기호에 영향을 주고 싶지 않을 때 사용합니다. 예를 들어 ?name=장삼은 ?name=%E5%BC%A0%E4%B8%89으로 인코딩되어 키 이름은 읽기 쉬운 상태로 유지되고 값만 인코딩됩니다.
**인코딩 하이라이트**: %XX 형식의 문자를 실시간으로 호박색으로 하이라이트 표시하여 어떤 문자가 인코딩되었는지 한눈에 알 수 있습니다. 이를 통해 인코딩 규칙을 이해하기 쉬워집니다: 영문자와 숫자는 보통 안전한 문자이므로 인코딩되지 않고 중국어와 특수 기호만 인코딩됩니다. 모든 계산은 브라우저 로컬에서 수행되며 데이터는 업로드되지 않습니다.
사용 사례
- API 매개변수 디버깅: encodeURIComponent와 encodeURI 출력 차이를 비교하여 인터페이스 서명 불일치 문제 해결
- 로그 디코딩: 로그의 URL 인코딩 내용을 일괄 디코딩하여 가독성 있는 텍스트로 복원
- URL 구성: Query Only 모드로 키 이름은 유지하고 값만 인코딩하여 수동 조합으로 인한 형식 오류 방지
- 프론트엔드 개발: 인코딩 하이라이트로 어떤 문자가 이스케이프되는지 이해하기 쉬워 페이지 이동 및 리디렉션 디버깅에 도움
- 데이터 마이그레이션: 레거시 시스템에서 내보낸 URL 인코딩 데이터를 일괄 처리하여 새 형식으로 변환
이용 방법
- 인코딩/디코딩할 URL 또는 텍스트를 입력하거나 붙여넣기
- 인코딩 방향(인코딩/디코딩)과 인코딩 모드(Component / URI / full / RFC 3986) 선택
- 여러 줄 데이터를 처리하려면 배치 모드를 활성화하고, 매개변수 값만 인코딩하려면 Query Only를 활성화
- 하이라이트된 결과를 확인하고 인코딩된 문자열을 복사하여 API 요청이나 URL 구성에 사용
주요 기능
- 네 가지 인코딩 모드: encodeURIComponent / encodeURI / full / RFC 3986 원클릭 전환, 각 규칙의 출력 차이를 실시간으로 비교
- 인코딩 하이라이트: 이스케이프된 %XX 문자를 실시간으로 하이라이트 표시, 호박색 마크로 인코딩 결과를 한눈에 파악
- 배치 모드: 여러 줄 일괄 인코딩/디코딩 지원, 각 줄을 독립적으로 처리. 로그나 일괄 데이터 처리에 적합
- Query Only 모드: URL 매개변수 값 부분(등호 뒤 내용)만 인코딩하고 키 이름, 기호, 경로 구조는 그대로 유지
- 실시간 디바운스: 300ms 자동 인코딩/디코딩, 버튼 클릭 필요 없이 입력하면 즉시 결과 표시
- 문자 수 카운트: 입력 문자 수를 실시간으로 표시, API 매개변수 길이 제한 확인에 편리
코드 예제
JavaScript에서의 URL 인코딩/디코딩
// encodeURIComponent: 개별 매개변수 값 인코딩 (가장 일반적)
const param = encodeURIComponent('장삼&리스');
console.log(param); // %E5%BC%A0%E4%B8%89%26%E6%9D%8E%E5%9B%9B
// encodeURI: 전체 URL 인코딩 (:/?#&= 등 구조 문자 보존)
const url = encodeURI('https://example.com/search?q=안녕하세요 세계');
console.log(url);
// 디코딩
const decoded = decodeURIComponent(param);
console.log(decoded); // 장삼&리스
// RFC 3986 호환 (~ 인코딩 안 함)
function rfc3986Encode(str) {
return encodeURIComponent(str).replace(/[!'()*]/g, c => '%' + c.charCodeAt(0).toString(16).toUpperCase());
}
// URLSearchParams API (현대적인 방식, 자동 인코딩 처리)
const params = new URLSearchParams({ name: '장삼', city: '북경' });
console.log(params.toString());
// name=%E5%BC%A0%E4%B8%89&city=%E5%8C%97%E4%BA%ACPython에서의 URL 인코딩/디코딩
from urllib.parse import quote, unquote, urlencode, quote_plus
# quote: encodeURIComponent와 유사
encoded = quote('장삼&리스')
print(encoded) # %E5%BC%A0%E4%B8%89%26%E6%9D%8E%E5%9B%9B
# RFC 3986 모드 (~ 인코딩 안 함, 기본값)
print(quote('hello~world')) # hello~world
# quote_plus: 공백을 +로 인코딩 (폼 형식)
print(quote_plus('hello world')) # hello+world
# 디코딩
print(unquote(encoded)) # 장삼&리스
# urlencode: 쿼리 문자열 구성
params = urlencode({'name': '장삼', 'city': '북경'})
print(params)
# name=%E5%BC%A0%E4%B8%89&city=%E5%8C%97%E4%BA%ACJava에서의 URL 인코딩/디코딩
import java.net.URLEncoder;
import java.net.URLDecoder;
import java.net.URI;
import java.nio.charset.StandardCharsets;
public class URLEncodeExample {
public static void main(String[] args) throws Exception {
// URL 인코딩 (URLEncoder는 폼 형식, 공백은 +가 됨)
String encoded = URLEncoder.encode("장삼&리스", "UTF-8");
System.out.println(encoded);
// %E5%BC%A0%E4%B8%89%26%E6%9D%8E%E5%9B%9B
// 디코딩
String decoded = URLDecoder.decode(encoded, "UTF-8");
System.out.println(decoded); // 장삼&리스
// 전체 URL 구성 (URI 클래스가 자동으로 인코딩 처리)
URI uri = new URI("https", "example.com", "/search", "q=안녕하세요", null);
System.out.println(uri.toASCIIString());
}
}자주 묻는 질문
encodeURIComponent와 encodeURI의 차이점은 무엇인가요?
encodeURIComponent는 &, =, ? 등을 포함한 모든 비안전 문자를 인코딩하므로 개별 매개변수 값 인코딩에 적합합니다. encodeURI는 URL 구조 문자(:、/、?、# 등)를 보존하므로 전체 URL 인코딩에 적합합니다. 사용场景: 매개변수 값에는 Component를, 전체 URL에는 URI를 사용하세요.
RFC 3986과 표준 인코딩의 차이점은 무엇인가요?
RFC 3986은 URL 표준의 개정판으로 물결표 ~를 인코딩이 필요 없는 안전한 문자로 취급합니다. 구 표준에서는 %7E로 인코딩됩니다. RFC 3986을 사용하면 일부 서버 측의 파싱 차이를 피할 수 있어 호환성이 더 좋습니다.
Query Only 모드는 어떤场景에서 사용하나요?
URL 쿼리 문자열 ?name=장삼&city=북경과 같은 경우, 키 이름과 기호에 영향을 주지 않고 매개변수 값만 인코딩하고 싶을 때 사용합니다. 이때 name과 city는 그대로 유지되고 값은 %E5%BC%A0%E4%B8%89과 %E5%8C%97%E4%BA%AC으로 인코딩됩니다.
공백 인코딩은 +와 %20 중 무엇을 사용해야 하나요?
application/x-www-form-urlencoded 형식(HTML 폼 제출)에서는 공백이 +로 인코딩됩니다. 하지만 URL 경로와 encodeURIComponent에서는 공백이 항상 %20으로 인코딩됩니다. 이 도구는 기본적으로 %20 형식을 사용합니다.
같은 중국어 문자인데 도구에 따라 인코딩 결과가 다른 이유는 무엇인가요?
이것은 문자 인코딩 방식에 따라 다릅니다. 이 도구는 UTF-8 인코딩(웹 표준)을 사용하며, 중국어 '中'은 %E4%B8%AD으로 인코딩됩니다. 다른 도구가 GBK 인코딩을 사용하는 경우 결과는 %D6%D0이 됩니다. 웹 URL에서는 항상 UTF-8 사용을 권장합니다.
인코딩 하이라이트는 어떤 용도인가요?
%XX 형식으로 인코딩된 문자(예: 공백→%20)를 하이라이트 표시하여 인코딩 규칙 이해와 문제 트러블슈팅에 도움을 줍니다. 영문자와 숫자는 안전한 문자이므로 인코딩되지 않고, 중국어와 특수 기호만 인코딩됩니다.
% 자체도 인코딩해야 하나요?
네. %는 URL 인코딩의 이스케이프 시작 문자입니다. 매개변수 값에 리터럴 %가 포함된 경우 %25로 인코딩해야 합니다. 그렇지 않으면 인코딩된 바이트로 잘못 해석되어 파싱 오류가 발생할 수 있습니다. 예를 들어 100%는 100%25로 인코딩해야 합니다.
용어집
- 퍼센트 인코딩(Percent-encoding)
- URL 인코딩의 정식 명칭. % 뒤에 두 자리 16진수로 문자를 표현하는 인코딩 방식입니다. 예를 들어 공백은 %20, 중국어 '中'은 %E4%B8%AD으로 인코딩됩니다.Wikipedia - 퍼센트 인코딩
- encodeURIComponent
- JavaScript 내장 함수. A-Z a-z 0-9 - _ . ! ~ * ' ( ) 외의 모든 문자를 인코딩합니다. URL 쿼리 매개변수의 개별 값을 인코딩할 때 가장 많이 사용됩니다.
- encodeURI
- JavaScript 내장 함수. URL 구조 문자(: / ? # [ ] @ ! $ & ' ( ) * + , ; =)를 보존하고 정말 인코딩이 필요한 문자만 인코딩합니다. 전체 URL을 인코딩할 때 사용합니다.
- RFC 3986
- URI 일반 구문에 관한 최신 IETF 표준(2005년). URL 인코딩 규칙을 정의하고 있으며 물결표 ~를 비예약 문자(인코딩 불필요)로 분류합니다. 구 RFC 2396과 RFC 1738을 대체합니다.RFC 3986
- 예약 문자(Reserved Characters)
- URL에서 특별한 의미를 가지는 문자(: / ? # [ ] @ ! $ & ' ( ) * + , ; = 등). 이러한 문자는 데이터로 사용할 때는 인코딩해야 하지만 구조적 위치에서는 인코딩해서는 안 됩니다.
- 비예약 문자(Unreserved Characters)
- URL의 어떤 위치에서도 인코딩 없이 사용할 수 있는 안전한 문자. A-Z, a-z, 0-9, -, _, ., ~(RFC 3986 기준)가 포함됩니다.
- 쿼리 문자열(Query String)
- URL의 ? 뒤 부분으로 key=value 쌍으로 구성되며 &로 구분됩니다. 예를 들어 ?name=장삼&age=20에서 name=장삼과 age=20이 두 개의 매개변수입니다.
- URLSearchParams
- 최신 브라우저가 제공하는 API. URL 쿼리 문자열을 쉽게 구성하고 파싱할 수 있으며 인코딩과 디코딩을 자동으로 처리합니다. 수동으로 문자열을 조합하는 것보다 안전하고 신뢰할 수 있습니다.
- application/x-www-form-urlencoded
- HTML 폼의 기본 제출 형식. 공백이 %20이 아닌 +로 인코딩되는 점이 encodeURIComponent와 다릅니다. 서버 사이드 프레임워크는 보통 두 형식을 모두 자동으로 처리합니다.
- UTF-8 인코딩
- 웹 표준 문자 인코딩. URL 인코딩에서는 비ASCII 문자(중국어, 이모지 등)를 먼저 UTF-8 바이트 시퀀스로 변환한 다음 각 바이트를 %XX 형식으로 인코딩합니다.
네 가지 인코딩 모드 문자 이스케이프 비교
| 문자 | 의미 | encodeURIComponent | encodeURI | RFC 3986 |
|---|---|---|---|---|
공백 | 공백 | %20 | %20 | %20 |
! | 느낌표 | %21 | ! | %21 |
# | 프래그먼트 식별자 | %23 | # | %23 |
$ | 달러 기호 | %24 | $ | %24 |
& | 매개변수 구분자 | %26 | & | %26 |
' | 작은따옴표 | %27 | ' | %27 |
( | 왼쪽 괄호 | %28 | ( | %28 |
) | 오른쪽 괄호 | %29 | ) | %29 |
* | 별표 | %2A | * | %2A |
+ | 더하기 기호 | %2B | + | %2B |
, | 쉼표 | %2C | , | %2C |
/ | 경로 구분자 | %2F | / | %2F |
: | 콜론 | %3A | : | %3A |
; | 세미콜론 | %3B | ; | %3B |
= | 등호 | %3D | = | %3D |
? | 쿼리 문자열 | %3F | ? | %3F |
@ | 골뱅이 | %40 | @ | %40 |
~ | 물결표 | %7E | %7E | ~ |
자주 사용되는 URL 예약 문자 퀵 레퍼런스
| 인코딩 후 | 원본 문자 | URL에서의 용도 |
|---|---|---|
%20 | (공백) | 공백 |
%21 | ! | 하위 구분자 |
%23 | # | 프래그먼트 식별자(해시) |
%25 | % | 이스케이프 문자 자체 |
%26 | & | 쿼리 매개변수 구분자 |
%2B | + | 더하기 기호/폼 공백 |
%2F | / | 경로 구분자 |
%3A | : | 스킴 구분자 |
%3D | = | 키-값 구분자 |
%3F | ? | 쿼리 문자열 시작 |
%40 | @ | 인증/이메일 구분자 |
%5B | [ | 배열 매개변수 (RFC 3986) |
Authoritative References
- 텍스트 비교
- 바이너리 변환
- 시저 암호
- 모스 부호
- 16진수 변환
- 비디오를 Base64로 변환
- Base64를 동영상으로 변환
- 이미지를 Base64로 변환
- Base64 이미지 변환
- 텍스트를 Base64로 변환
- Base64 텍스트로 변환
- 파일 해시 검증
- File to Base64
- Base64 파일로 변환
- 오디오 → Base64
- Base64를 오디오로 변환
- AES 암호화 및 복호화
- DES 암호화/복호화
- Base32 인코더 디코더
- Base58 인코딩 및 디코딩
- Base64 인코딩
- Base64 디코드
- Base64 비교
- Base64 분할
- Base64 여러 줄 병합
- Base64 형식화
- Base64 형식 검사
- Base64 일괄 인코딩
- Base64 일괄 디코딩
- Base64 정리
- Base64 패딩 처리
- Base64 길이 통계
- Base64 16진수로 변환
- Base64 DataURL 변환
- Base64-Hex 양방향 변환
- Base85 인코딩/디코딩
- HMAC 생성 및 검증
- PBKDF2 키 파생
- MD5 해시값
- SHA-256 해시
- SHA1 해시
- SHA512 해시
- JWT 도구
- HTML 엔티티 인코딩/디코딩
- Unicode 이스케이프
- URL 인코딩
- URL Safe Base64
- MIME Base64
- Java 난독화
- JS 난독화
- PHP 난독화
- Python 난독화