URL パーセントエンコーディング: URL がスペースを %20 に置き換える理由 (RFC 3986 ガイド)

URL は厳密な ASCII 文字セットに制限されます。特殊文字 (スペース、アクセント、アンパサンド、スラッシュ) をインターネット上で安全に送信するには、パーセントでエンコードされたシーケンス (スペース = %20 など) としてエンコードする必要があります。

URL containing special characters being encoded to percent-encoded safe format

URL に特殊文字エンコーディングが必要な理由

Comparison between RFC 3986 percent-20 and application-form-urlencoded plus encoding for spaces

URL は HTTP プロトコルを使用してネットワーク上で送信されます。 HTTP 仕様 (およびその前身であるインターネット プロトコル標準) では、URL を US-ASCII 文字のサブセット、特にバイト値が 0x21 から 0x7E までの文字に制限しています。

この範囲外の文字(スペース、アクセント付き文字(é、ñ、ü)、中国語/日本語/韓国語の文字、および多くの記号を含む)は、エンコードなしの URL では安全ではありません。

特にスペースを使用する理由 HTTP では、リクエスト ラインのメソッド、URL、プロトコル バージョンの間の区切り文字としてスペースが使用されます:

GET /search?q=hello world HTTP/1.1

サーバーは、「hello」を URL の末尾として認識し、「world」を HTTP バージョン文字列の無効な部分として認識します。 URL が壊れています。

解決策: パーセント エンコーディング (RFC 3986 で定義) は、安全でない文字を安全な %XX 表記に変換します。ここで、XX は 16 進バイト値です。


パーセントエンコーディングの仕組み

JavaScript URL encoding API difference between encodeURI and encodeURIComponent functions

Hexadecimal ASCII byte lookup table for the eight most frequently encoded URL special characters

UTF-8 のすべての文字は 1 ~ 4 バイトです。パーセント エンコードでは、各バイトが % に変換され、その後に 2 桁の 16 進数が続きます:

キャラクターUTF-8バイトパーセントエンコード
スペース0x20%20
#0x23%23
&0x26%26
=0x3D%3D
/0x2F]%2F
é0xC3 0xA9%C3%A9
中0xE4 0xB8 0xAD%E4%B8%AD

https://example.com/搜索のような漢字を含むURLは、https://example.com/%E6%90%9C%E7%B4%A2

のようになります。

予約された文字と予約されていない文字

Reserved versus unreserved URL character set comparison showing characters that must be percent-encoded

予約されていない文字 (これらは決してエンコードしないでください): A-Z a-z 0-9 - _ 。 ~ これらはすべての URL コンテキストで安全であり、常にエンコードされていない状態で表示される必要があります。

予約文字 (区切り文字ではなくデータとして使用する場合にエンコード): : / ? # [ ] @ ! $ & ' ( ) * + , ; = これらの文字は URL において特別な意味を持ちます。クエリ パラメータ値にリテラル データとして表示される場合はエンコードします。

例 — 検索クエリ URL:

https://example.com/search?q=cats&dogs

これは曖昧です。クエリは「猫」ですか、それとも「猫と犬」ですか?エンコードあり:

https://example.com/search?q=cats%26dogs

アンパサンドがクエリ パラメータ区切り文字としてではなく、データとしてエンコードされるようになりました。


ToolDolfen での URL のエンコードとデコード

ToolDolfen in-browser URL encoder and decoder client-side execution workflow

  1. URLエンコード・デコードを開きます。
  2. エンコードするには: 特殊文字を含む URL または URL コンポーネントを貼り付けます。 [エンコード] をクリックします。
  3. デコードするには: パーセントでエンコードされた URL または文字列を貼り付けて、人間が判読できるオリジナルを表示します。

このツールは、完全な URL と URL コンポーネント (個々のクエリ パラメーター値) の両方を処理します。完全な URL エンコードの場合、予約されていない文字のみがエンコードされます。コンポーネントのエンコードでは、予約文字もエンコードされます。

推奨コンパニオン ガイド

このトピック クラスタの補完的なチュートリアルとユーティリティを探索して、デジタル ワークフローを強化してください:

HEX、RGB、HSL: CSS とデザインのための完全なカラー モデル ガイド検証済みの標準とブラウザ内での実践的なステップバイステップ チュートリアル強力なパスワードの数学: エントロピー、NIST ガイドライン、パスワードの長さ検証済みの標準とブラウザ内を使用した実践的なステップバイステップのチュートリアルMarkdown to HTML Converter Guide: GFM Tables、Math & Real-World Gotchas検証済みの標準とブラウザ内を使用した実用的なステップバイステップのチュートリアルPDF ファイルを分割して特定のページ範囲を抽出する方法関連データとメディアを接続する補完的なクロスフォーマット ワークフローツール。
推奨ユーティリティ: URL エンコーダ / デコーダこのワークフローは、サーバーへのアップロードを一切行わず、クライアント側のプライバシーを 100% 保護して、ブラウザでライブで実行します。
URLエンコード・デコード
URLエンコード・デコード

よくあるご質問 (FAQ)

このワークフローに関するよくある質問への迅速で検証済みの回答をご覧ください。

URL 内のスペースの %20 と + の違いは何ですか?

%20 は、URL 内のスペースの RFC 3986 標準パーセント エンコーディングです。 + 記号は、クエリ パラメーター内のスペースに対する従来の HTML フォーム エンコード規則 (application/x-www-form-urlencoded) です。 + はクエリ文字列で広くサポートされていますが、%20 はより普遍的に正しいため、URL パスには推奨されます。

URL にエンコードしてはいけない文字はありますか?

はい。予約されていない文字 (A ~ Z、a ~ z、0 ~ 9、-、_、.、~) は決してエンコードしないでください。これらはすべての URL コンテキストで安全です。予約文字 (/、?、#、&、=、@、!、$) は、機能的な役割を果たす場合 (パス セグメントを区切る / など) はエンコードしないでください。

URL に特殊文字を貼り付けると 404 エラーが発生するのはなぜですか?

多くの Web サーバーは、エンコードされていない特殊文字を含む URL を拒否します。 URL にスペース、角括弧、中括弧、または非 ASCII 文字 (アクセント付き文字、CJK 文字) が含まれている場合は、最初に URL エンコーダを使用してそれらをエンコードします。

Bilal Ahmad