URL 인코딩
Highlight는 비율 바이트 코덱입니다.
무료 온라인 URL 인코딩/디코딩 도구. encodeURIComponent / encodeURI / RFC 3986 네 가지 인코딩 모드를 지원합니다. 이스케이프된 문자를 실시간으로 하이라이트 표시하며, 배치 모드는 여러 줄 처리를 지원하고, Query Only는 매개변수 값만 인코딩합니다. 브라우저 로컬 처리로 데이터는 업로드되지 않습니다.
Highlight는 비율 바이트 코덱입니다.
무료 온라인 URL 인코딩/디코딩 도구. encodeURIComponent / encodeURI / RFC 3986 네 가지 인코딩 모드를 지원합니다. 이스케이프된 문자를 실시간으로 하이라이트 표시하며, 배치 모드는 여러 줄 처리를 지원하고, Query Only는 매개변수 값만 인코딩합니다. 브라우저 로컬 처리로 데이터는 업로드되지 않습니다.
encodeURIComponent는 &, =, ? 등을 포함한 모든 비안전 문자를 인코딩하므로 개별 매개변수 값 인코딩에 적합합니다. encodeURI는 URL 구조 문자(:、/、?、# 등)를 보존하므로 전체 URL 인코딩에 적합합니다. 사용场景: 매개변수 값에는 Component를, 전체 URL에는 URI를 사용하세요.
RFC 3986은 URL 표준의 개정판으로 물결표 ~를 인코딩이 필요 없는 안전한 문자로 취급합니다. 구 표준에서는 %7E로 인코딩됩니다. RFC 3986을 사용하면 일부 서버 측의 파싱 차이를 피할 수 있어 호환성이 더 좋습니다.
URL 쿼리 문자열 ?name=장삼&city=북경과 같은 경우, 키 이름과 기호에 영향을 주지 않고 매개변수 값만 인코딩하고 싶을 때 사용합니다. 이때 name과 city는 그대로 유지되고 값은 %E5%BC%A0%E4%B8%89과 %E5%8C%97%E4%BA%AC으로 인코딩됩니다.
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로 인코딩해야 합니다.
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 형식의 문자를 실시간으로 호박색으로 하이라이트 표시하여 어떤 문자가 인코딩되었는지 한눈에 알 수 있습니다. 이를 통해 인코딩 규칙을 이해하기 쉬워집니다: 영문자와 숫자는 보통 안전한 문자이므로 인코딩되지 않고 중국어와 특수 기호만 인코딩됩니다. 모든 계산은 브라우저 로컬에서 수행되며 데이터는 업로드되지 않습니다.
| 문자 | 의미 | 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에서의 용도 |
|---|---|---|
%20 | (공백) | 공백 |
%21 | ! | 하위 구분자 |
%23 | # | 프래그먼트 식별자(해시) |
%25 | % | 이스케이프 문자 자체 |
%26 | & | 쿼리 매개변수 구분자 |
%2B | + | 더하기 기호/폼 공백 |
%2F | / | 경로 구분자 |
%3A | : | 스킴 구분자 |
%3D | = | 키-값 구분자 |
%3F | ? | 쿼리 문자열 시작 |
%40 | @ | 인증/이메일 구분자 |
%5B | [ | 배열 매개변수 (RFC 3986) |
// 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%ACfrom 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%ACimport 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());
}
}