スペースは %20 か + か:2つの流儀が生まれた理由と使い分け
更新日:2026-09-17
URLの中のスペースは、%20 と書かれていることも + と書かれていることもあります。どちらが正しいのか、という話を整理します。
どちらも使われている
結論から言うと、場所によって正しいものが違います。
| 場所 | スペースの表し方 | 根拠 |
|---|---|---|
| URLのパス部分 | %20 | パーセントエンコーディングの仕様 |
| クエリ文字列(フォーム送信) | + または %20 | フォーム送信の形式 |
同じ「a b」でも
パス部分 … https://example.com/a%20b
クエリ部分 … https://example.com/?q=a+b または ?q=a%20b
なぜ2つあるのか
もともとURLの仕様では、使えない文字は %XX に置き換えることになっています。スペースもその1つで %20 です。
一方、Webのフォームを送信するときの形式では、スペースを + に置き換えることが決められました。%20 より3文字短くなるため、URLが短く済みます。
この2つが別々に定まったため、いまも両方が使われています。
+ そのものを送りたいとき
プラス記号は %2B にする必要があります
クエリ文字列では + がスペースを意味するため、プラス記号そのものを送るときは %2B にエスケープします。そうしないと、受け取る側でスペースに変換されます。電話番号の国番号(+81)や数式を渡すときに問題になります。
よくある不具合
送りたい値 … +81 90 1234 5678
そのまま渡す … ?tel=+81 90 1234 5678
受け取る側が読む値 … 81 90 1234 5678(先頭がスペースになる)
正しくは … ?tel=%2B81%2090%201234%205678
読み取る側はどう扱うか
クエリ文字列を読み取るとき、多くの仕組みは + をスペースとして解釈します。%20 もスペースとして解釈します。つまりどちらで送ってもスペースとして受け取れます。
一方、パス部分では + はプラス記号のままです。ここが混同されやすいところです。
迷ったら %20 を使うのが安全です。パスでもクエリでもスペースとして解釈されるためです。+ はクエリ文字列でしか通じません。
当サイトのツールでの扱い
テキスト変換のURLエンコードでは %20 で書き出します。デコードするときは、+ もスペースとして戻せるようにしています。
どちらの形式で渡されたURLも読めるようにしておくほうが、実際に見かける文字列を扱いやすいためです。
関連する記号
スペース以外にも、クエリ文字列で意味を持つ記号があります。データとして渡すときはエスケープが必要です。
| 記号 | クエリでの意味 | エスケープ後 |
|---|---|---|
& | パラメータの区切り | %26 |
= | 名前と値の区切り | %3D |
? | クエリの開始 | %3F |
# | ハッシュの開始 | %23 |
+ | スペース | %2B |
とくに & は、値の中に含まれるとパラメータが分かれてしまいます。検索キーワードに & が入っている場合などに起きます。
まとめ
- スペースは、パス部分では
%20、クエリ文字列では+か%20 - 2つの仕様が別々に定まったため、両方が使われている
- プラス記号そのものを送るときは
%2Bにする - 迷ったら
%20を使うほうが安全 &=?#も、値に含めるならエスケープが必要
この記事の位置づけ
仕様と一般的な動作を整理したものです。実際の挙動はブラウザやアプリの実装、受け取り側のシステムによって変わることがあります。業務で使う場合は、実際のデータで往復して確かめておくと安全です。
参考・出典
- RFC 3986: Uniform Resource Identifier (URI)
- RFC 4648: The Base16, Base32, and Base64 Data Encodings
- WHATWG Encoding Standard
※2026年9月時点の仕様と、主要なブラウザでの動作にもとづいています。