URLエンコード / デコード/ エンコード · デコード · フォーム

encodeURIComponent、encodeURI、フォームエンコードの3モードでURLをリアルタイムにエンコード・デコード。

全ての特殊文字をエンコード(推奨、クエリパラメータ値用)

プレーンテキスト
0 文字
エンコード結果
サイズ比: —%0 文字
一般的なエンコード一覧
%20 / +
!%21
"%22
#%23
%%25
&%26
'%27
+%2B
/%2F
=%3D
?%3F
@%40

このツールは役に立ちましたか?

URLエンコーディングとは

URLエンコーディング(パーセントエンコーディング)は、URL内の特殊文字を `%` に2桁の16進数を続けた形式に変換します。URLでは英数字と一部の記号(`-_.~`)のみ使用可能で、スペース(%20)や日本語(%E6%97%A5%E6%9C%AC)などのその他の文字はエンコーディングが必要です。ブラウザはアドレスバーの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)、および - _ . ~ の4つの記号。URL構成要素によっては一部の予約文字も許可されますが、互換性のためにすべての英数字以外をエンコードするのが安全です。
%20と+はどちらもスペースを表しますが、違いは?
%20はURL内のどこでも有効なスペースの汎用エンコードです。+記号はapplication/x-www-form-urlencodedのクエリ文字列でのみスペースを意味し、URLパスではリテラルのプラス記号です。曖昧さを避けるため%20の統一使用を推奨します。
JavaScriptでURLクエリ文字列を正しく構築するには?
URLSearchParams APIを使用してください:new URLSearchParams({ key: value }).toString()で自動的に正しくエンコードされます。手動で連結する場合は各値にencodeURIComponent(value)を使用してください。未エンコードの文字列を直接連結すると、インジェクション脆弱性やパースエラーの原因になります。