URL エンコード / デコード — パーセントエンコーディングと URL パーサー
URL 用のテキストをコンポーネント、URL 全体、フォームの各モードでパーセントエンコード・デコードし、URL のクエリパラメーターを表で編集できます。
encodeURIComponent: クエリの値やパスのセグメント 1 つに使います。A–Z a–z 0–9 - _ . ! ~ * ' ( ) 以外をすべてエスケープします。
name%3DZo%C3%AB%20%26%20Tom%20%2F%20caf%C3%A9%3Fid%3D42%23top
URL パーサーとクエリ文字列エディター
| プロトコル | https: |
|---|---|
| ホスト | shop.example.com |
| ポート | 8443 |
| パス | /search/trail%20shoes |
| クエリ | ?q=trail+running&size=10&color=blue%20%26%20green&utm_source=newsletter |
| フラグメント | #reviews |
| オリジン | https://shop.example.com:8443 |
https://shop.example.com:8443/search/trail%20shoes#reviews
すべてブラウザ内で動作します。入力内容が送信・保存されることはありません。 すべての無料ツールを見る.
不具合や改善できそうな点を見つけましたか?いただいたメッセージはすべて読み、すぐに対応します。
この URL エンコーダー・デコーダーは、テキストとパーセントエンコーディングを相互に変換します。パーセントエンコーディングとは、スペース、アンパサンド、アクセント付き文字、絵文字を URL の中で安全に扱えるようにする %20 形式のエスケープです。開発者が実際に混同しやすい 3 つのエンコード方式に対応しています。1 つのクエリ値やパスの区間に使うコンポーネントモード(encodeURIComponent)、URL 自体の区切り記号はそのままにする URL 全体モード(encodeURI)、そして HTML フォームや URLSearchParams が送信する、スペースを + にするフォームモードです。
デコードは意図的に厳密にしています。ブラウザの decodeURIComponent は単に「URI malformed」というエラーを出すだけですが、このツールはどの % シーケンスがどこで壊れているのか、そしてバイト列が有効な UTF-8 でないのか(上流のどこかで Latin-1 が使われたことを示すよくある兆候)を教えてくれます。エンコーダーの下にある URL パーサーは、任意の URL を構成要素に分解し、クエリパラメーターを編集可能な表に並べ、変更すると URL を組み立て直します。
使い方
- エンコードかデコードを選び、モードを選びます。URL に入れる値ならコンポーネント、アドレス全体なら URL 全体、application/x-www-form-urlencoded のデータならフォームです。
- テキストを入力するか貼り付けます。結果は入力に合わせて更新されます。リストの場合は「各行を個別に」にチェックを入れます。
- デコードに失敗した場合はメッセージを読みます。位置と壊れたシーケンスが示されます。
- URL を確認・編集するには、パーサーに貼り付け、クエリパラメーターを変更・追加・削除して、組み立て直された URL をコピーします。
よくある質問
encodeURI と encodeURIComponent の違いは何ですか?
encodeURIComponent は英字、数字、- _ . ! ~ * ' ( ) 以外をすべてエスケープするため、& や = を含むかもしれないクエリ値のような URL の一部分に安全に使えます。encodeURI は URL 全体を渡されることを前提に、URL の構造を作る文字(: / ? # @ & = + $ , ;)をそのまま残します。値に encodeURI を使うのは定番のバグで、値の中の & によってパラメーターが 2 つに分かれてしまいます。
スペースは %20 と + のどちらにすべきですか?
場所によってどちらも正解です。フォーム送信のクエリ文字列(application/x-www-form-urlencoded)ではスペースは + で、プラス記号そのものは %2B にする必要があります。それ以外の場所(パスや、手で組み立てた多くのクエリ文字列など)ではスペースは %20 で、+ はプラス記号そのものを意味します。サーバーでスペースのはずの場所にプラス記号が表示される(またはその逆)場合は、どちらのルールを使うかについて両側の認識が食い違っています。
「URI malformed」エラーが出るのはなぜですか?
% 記号の後に 16 進数 2 桁が続いていない(たとえば "100%" や "%zz")か、バイト列が無効な UTF-8 になっている(たとえば単独の %E9 は Latin-1 では é ですが、UTF-8 では無効)かのどちらかです。パーセント記号そのものは %25 と書く必要があります。このツールは正確な位置を示すので、どちらが原因かがわかります。
URL エンコードが必要な文字は?
RFC 3986 では、どこでもエンコードせずに使えるのは英字、数字、- . _ ~ だけです。予約文字(: / ? # [ ] @ ! $ & ' ( ) * + , ; =)は、構造としてではなく値の中に現れる場合にエンコードが必要です。それ以外のすべて(スペース、引用符、< >、ASCII 以外の文字、絵文字など)は、常にその文字の UTF-8 のバイト列としてエンコードする必要があります。
URL エンコードは暗号化の一種ですか?
いいえ。パーセントエンコーディングは鍵のない元に戻せるエスケープ方式で、誰でもすぐにデコードできます。URL 内のトークンや個人データを隠す目的で頼ってはいけません。また URL はブラウザの履歴、サーバーのログ、Referer ヘッダーに残るため、そもそもシークレットをクエリ文字列に入れるべきではありません。
エンコードのリファレンス:各モードがそのまま残す文字
• コンポーネント(encodeURIComponent):A–Z a–z 0–9 - _ . ! ~ * ' ( ) を残します。クエリ値、パスの区間、文字列連結で組み立てるあらゆるものに使います。
• URL 全体(encodeURI):さらに ; , / ? : @ & = + $ # も残します。スペースや ASCII 以外の文字を含む完全な URL を整えるときだけに使います。
• フォーム(application/x-www-form-urlencoded):A–Z a–z 0–9 * - . _ を残し、スペースを + にします。URLSearchParams.toString() や HTML フォームが生成する形式です。
• RFC 3986 の非予約文字:A–Z a–z 0–9 - . _ ~。最も厳密な解釈で、! ' ( ) * もエンコードしておけば常に安全です。
ASCII 以外の文字は常に UTF-8 のバイト列としてエンコードされます。é は %C3%A9、絵文字の 🌲 は 4 バイトの %F0%9F%8C%B2 です。
二重エンコードなどのよくあるバグ
二重エンコードは、すでにエンコードされた文字列をもう一度エンコードすると起こります。% 自体が %25 にエスケープされるため、%20 が %2520 になります。URL に %25 の後に 16 進数 2 桁が続くものがあれば、どこかで 2 回エンコードされています。1 回デコードして、結果にまだ % シーケンスが含まれているか確認しましょう。
逆のミスは、エンコードせずに文字列連結で URL を組み立てることです。"fish & chips" を検索すると、q=fish と " chips" という名前の余計なパラメーターが送られてしまいます。URLSearchParams でクエリ文字列を組み立てるか、各値を encodeURIComponent でエンコードすれば、どちらのミスも防げます。
最後に、ユーザー入力をデコードしてそのまま HTML に挿入すると、反射型クロスサイトスクリプティングの原因になります。表示用にデコードするのは HTML のエスケープをしてからにしましょう。その工程は HTML エンティティエンコーダーで行えます。
関連する無料ツール
- UTM リンク作成 — きれいで一貫した UTM トラッキングリンクを作成し、どのキャンペーンが顧客を連れてきたのかを正確に把握できます。
- Base64 エンコーダー / デコーダー — テキストやファイルを Base64 にエンコードし、画像を CSS や <img> のコード付きでデータ URI に変換、Base64 をプレビュー可能なファイルにデコードできます。データはブラウザの外に出ません。
- HTML エンティティ変換 — テキストを名前付きまたは数値の文字参照で HTML 用にエスケープし、& のような参照を文字に戻し、エンティティの一覧表を検索できます。
- JWT デコーダー — JWT のヘッダーとペイロードをデコードし、有効期限をわかりやすく表示し、HS・RS・PS・ES の署名を検証したり、新しいトークンに署名したりできます。何もブラウザの外に出ません。