URL 인코더 / 디코더/ 인코딩 · 디코딩 · 폼

encodeURIComponent, encodeURI, 폼 인코딩 3가지 모드로 URL을 실시간 인코딩/디코딩.

모든 특수 문자 인코딩 (권장, 쿼리 매개변수 값용)

원본 텍스트
0 문자
인코딩 결과
크기 비율: —%0 문자
자주 사용되는 인코딩
%20 / +
!%21
"%22
#%23
%%25
&%26
'%27
+%2B
/%2F
=%3D
?%3F
@%40

이 도구가 도움이 되었나요?

URL 인코딩이란 무엇인가

URL 인코딩(퍼센트 인코딩)은 URL 내의特殊 문자를 `%` 뒤에 두 자리 16진수 형태로 변환합니다. URL은 영문자, 숫자 및少数 기호(`-_.~`)만 허용하며, 공백(%20)이나 한글(%ED%95%9C%EA%B8%80)等 기타 문자는 인코딩이 필요합니다. 브라우저는 주소 표시줄의 URL을 자동으로 인코딩하지만, 프로그래밍으로 URL을 구성할 때는 수동으로 처리해야 합니다.

URL 인코딩의常见 场景

쿼리 매개변수로特殊 문자를传递하는 경우(검색 키워드에 `&` 나 `=` 가 포함된 경우), 폼 데이터 제출(POST는 기본적으로 URL 인코딩 사용), API 요청에서 JSON이나 한글 매개변수 전달, OAuth 콜백 URL 처리等입니다. JavaScript의 `encodeURIComponent()` 나 Python의 `urllib.parse.quote()` 가常用됩니다.

코드 예시

JavaScript
// Encode a query parameter value
encodeURIComponent("Hello World! 中文")
// "Hello%20World!%20%E4%B8%AD%E6%96%87"

// Build a full query string (recommended)
const params = new URLSearchParams({
  q: "hello world",
  lang: "zh-CN",
  page: "1",
});
params.toString()
// "q=hello+world&lang=zh-CN&page=1"

// Decode
decodeURIComponent("Hello%20World%21")
// "Hello World!"
Python
from urllib.parse import (
    quote, unquote,
    urlencode, quote_plus
)

# Encode single value
quote("Hello World! 中文")
# 'Hello%20World%21%20%E4%B8%AD%E6%96%87'

# Form encoding (spaces → +)
quote_plus("hello world")
# 'hello+world'

# Build query string
urlencode({"q": "hello world", "page": 1})
# 'q=hello+world&page=1'

# Decode
unquote("Hello%20World%21")  # 'Hello World!'
Go
import "net/url"

// Encode a path segment
url.PathEscape("hello world/中文")
// "hello%20world%2F%E4%B8%AD%E6%96%87"

// Encode a query value
url.QueryEscape("hello world")
// "hello+world"

// Build query string
params := url.Values{}
params.Set("q", "hello world")
params.Set("lang", "zh-CN")
params.Encode()
// "lang=zh-CN&q=hello+world"

// Parse a URL
u, _ := url.Parse("https://example.com/search?q=hello+world")
u.Query().Get("q")  // "hello world"
Shell (curl)
# curl handles encoding automatically with --data-urlencode
curl -G https://api.example.com/search \
  --data-urlencode "q=hello world 中文" \
  --data-urlencode "page=1"

# Manual percent-encoding with Python
python3 -c "
import sys
from urllib.parse import quote
print(quote(sys.stdin.read().strip()))
" <<< "hello world 中文"

# Using jq to build encoded JSON body
curl -X POST https://api.example.com \
  -H 'Content-Type: application/json' \
  -d "$(jq -n --arg q 'hello world' '{query: $q}')"

자주 묻는 질문

encodeURIComponent와 encodeURI의 차이점은?
encodeURIComponent는 거의 모든 특수 문자(:/?#[]@!$&'()*+,;= 포함)를 인코딩하며 개별 쿼리 매개변수 값에 적합합니다. encodeURI는 URL 구조 문자를 보존하여 전체 URL 인코딩에 적합합니다. 대부분의 경우 encodeURIComponent를 사용하세요.
폼 인코딩(application/x-www-form-urlencoded)이란?
폼 인코딩은 HTML 폼 제출의 기본 형식입니다. encodeURIComponent와의 유일한 차이점은 공백이 %20 대신 +로 인코딩된다는 것입니다. 브라우저는 <form> 제출 시 자동으로 이 형식을 사용하며, 많은 API도 이 형식의 요청 본문을 지원합니다.
URL에 비ASCII 문자를 사용할 수 없는 이유는?
URL 사양(RFC 3986)은 ASCII 문자만 허용합니다. 한국어 등 비ASCII 문자는 먼저 UTF-8로 바이트 시퀀스로 인코딩한 후 각 바이트를 %XX 형식으로 표현해야 합니다. 예를 들어 한자 '中'은 URL에서 %E4%B8%AD로 인코딩됩니다.
URL 인코딩이 필요 없는 문자는?
RFC 3986의 '비예약 문자'는 인코딩이 필요 없습니다: 영문자(A-Z, a-z), 숫자(0-9), 그리고 - _ . ~ 네 가지 기호. URL 구성 요소에 따라 일부 예약 문자도 허용되지만, 호환성을 위해 영숫자 이외의 모든 문자를 인코딩하는 것이 안전합니다.
%20과 +는 모두 공백을 나타내는데 차이점은?
%20은 URL 어디에서나 유효한 공백의 범용 인코딩입니다. + 기호는 application/x-www-form-urlencoded의 쿼리 문자열에서만 공백을 의미하며, URL 경로에서는 리터럴 더하기 기호입니다. 모호함을 피하려면 %20을 통일적으로 사용하세요.
JavaScript에서 URL 쿼리 문자열을 올바르게 구성하려면?
URLSearchParams API를 사용하세요: new URLSearchParams({ key: value }).toString()으로 자동으로 올바르게 인코딩됩니다. 수동으로 연결할 때는 각 값에 encodeURIComponent(value)를 사용하세요. 인코딩되지 않은 문자열을 직접 연결하면 인젝션 취약점이나 파싱 오류가 발생합니다.