URL エンコード — ブラウザで URL の特殊文字をエンコード
URL 用の特殊文字・スペース・非 ASCII テキストを URL エンコード。RFC 3986 準拠、ブラウザのみで動作。アップロードなし、制限なし。
Percent-encoding は、現在も日常的に使われている最も古いエンコード規格です。1994 年の RFC 1738 で規定され、2005 年の RFC 3986 で改良されましたが、それ以来変更されていません。URL で許可されない文字——スペース、非 ASCII テキスト、区切り文字、URL 構造のために予約された文字——は % と 2 桁の 16 進数に置き換えられます。このエンコードは Web にとって極めて基本的であるため、すべてのブラウザ、すべての HTTP ライブラリ、すべての Web フレームワークが自動的に処理し、誰もがそれを意識するのは自動化が失敗したときだけです。自動化は次のような場合に失敗します。ツールが少なすぎるエンコードを行い(スペースがそのまま fetch に渡される)、多すぎるエンコードを行い(パス区切りの / がパス内でエンコードされる)、または誤った文字セットを使い(Latin-1 でエンコードされたクエリ値が UTF-8 のエンドポイントに送られる)。
エンコードモードの選択——すべてをエンコード、クエリ文字列のみをエンコード、パスコンポーネントのみをエンコード——は、出力が機能するか壊れるかを決定する選択です。クエリ文字列モードでは &、=、? をエンコードします。これらはキーと値のペアを区切る区切り文字だからです。パスコンポーネントモードでは / と : をエンコードします。これらはパスセグメントとスキーム宣言を区切る区切り文字だからです。デフォルトの「すべての特殊文字をエンコード」が最も安全です。生成される文字列は URL 内のどこでも問題なく動作します。コンポーネント別モードが存在するのは、URL がコンポーネントから構成されており、各コンポーネントにそれぞれ独自の安全文字セットがあるためです。
最後に引き渡しについて:エンコードした文字列がクエリパラメータの値であれば、Query String Parser ツールと組み合わせて完全な URL を組み立ててください。エンコードした文字列が HTML ドキュメントの一部であれば、タグ属性内の実体については HTML Entity Encode ツールを使用してください。HTML での URL エンコードは href 属性と src 属性内でのみ有効であり、一般的なコンテンツには使えません。複数のパーツから URL を組み立てる場合は、本番に出荷する前に URL Parser ツールで組み立て結果を検証してください。
使い方
テキストを入力または貼り付ける
入力エリアに文字列を入れます。スペースは `%20` に、特殊文字は `%` と 2 桁の 16 進数に、非 ASCII テキストは UTF-8 バイト列としてエンコードされます。出力はリアルタイムで更新されます。
エンコード方式を選択する
デフォルトは「すべての特殊文字をエンコード」で、最も安全に転送できます。クエリ文字列のみをエンコードするモードはパラメータ値向けで、`&`、`=`、`?` はエンコードしますが `/` と `:` はそのままにします。コンポーネントのみモードは単一のパスセグメントに便利です。
エンコードされた URL をコピーする
エンコードされた文字列をクリップボードにコピーします。出力はそのまま URL バー、`<a href>` 属性、`fetch()` 呼び出しに貼り付けられ、追加の処理は不要です。
よくある質問
パーセントエンコードとは何ですか?またその仕組みは?
パーセントエンコード(URL エンコードとも呼ばれます)は、安全でない文字を `%` と 2 桁の 16 進数に置き換えます。スペースは `%20` に、アンパサンドは `%26` に、ユーロ記号は `%E2%82%AC`(UTF-8 の 3 バイト)になります。このエンコードは RFC 3986 で規定されており、URL に任意のバイトを埋め込む唯一の方法です。
URL エンコードはテキストが暗号化または隠されるということですか?
いいえ。URL エンコードはトランスポート用のエンコードであり、暗号化ではありません。`%48%65%6C%6C%6F` を見た人は誰でも、どんなデコーダでも 'Hello' に復元できます。その目的は、URL パーサーを通して文字列を安全に転送できるようにすることであり、隠すことではありません。
なぜデフォルトでは一部の文字がエンコードされないのですか?
「非予約」セットの文字(A-Z、a-z、0-9、`-`、`.`、`_`、`~`)はどの位置でも URL セーフであり、エンコードは不要です。`/`、`?`、`#` などの文字は URL 内で構造的な意味を持つため、パス区切りやクエリ区切りではなくリテラルな文字として扱いたい場合のみエンコードされます。
中国語や絵文字のような非 ASCII テキストはツールでどう処理されますか?
各非 ASCII 文字はその UTF-8 バイト列に変換され、各バイトが個別にパーセントエンコードされます。文字 字(U+5B57、UTF-8 の 3 バイト E5 AD 97)は `%E5%AD%97` になります。これはあらゆる Unicode 文字で動作し、RFC 3986 の要件でもあります。
制限事項
- 二重エンコードの検出なしツールは与えられたテキストをそのままエンコードします。入力がすでに部分的にエンコードされている(`%20` を含む)場合、`%` 自体が `%25` にエンコードされ、二重エンコードされた出力が生成されます。入力がすでにエンコードされている可能性がある場合は、まず URL デコードツールでデコードしてください。
- パスとクエリの曖昧さツールは入力を URL として解析しません。入力全体を一つの文字列としてエンコードします。URL の一部のみをエンコードする必要がある場合は、まず URL パーサーツールで URL をコンポーネントに分割してください。
- Punycode / IDN には対応していません`münchen.de` のような国際化ドメイン名(IDN)は、DNS で名前解決する前に Punycode(`xn--mnchen-3ya.de`)に変換する必要がありますが、パーセントエンコードと Punycode は別の規格です。このツールが処理するのはパス・クエリ・フラグメント部分のみです。
プラットフォーム別の注意点
- macOS
- ターミナルでの同等コマンド: `python3 -c 'import urllib.parse; print(urllib.parse.quote("text"))'`。ブラウザツールは、ターミナルを開かずにクリップボードやチャットからのアドホックなエンコードに最適です。
- Linux
- CLI での同等コマンド: `echo -n 'text' | python3 -c 'import urllib.parse,sys; print(urllib.parse.quote(sys.stdin.read()))'`。ブラウザツールならシングルクォートや特殊文字を含む文字列でのクォートの煩わしさがありません。
- Windows
- PowerShell での同等コマンド: `[System.Web.HttpUtility]::UrlEncode('text')`。PowerShell へのアクセスが制限された環境では、ブラウザツールがオフラインで動作します。
- Web
- 完全にクライアントサイドで動作します。ページの読み込み後はオフラインでも動作します。開発やデバッグ中にクエリパラメータを手早くエンコードするのに便利です。