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
クエリパラメーター(0)— デコード済み、自由に編集できます
再構築した URL
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 を組み立て直します。

使い方

  1. エンコードかデコードを選び、モードを選びます。URL に入れる値ならコンポーネント、アドレス全体なら URL 全体、application/x-www-form-urlencoded のデータならフォームです。
  2. テキストを入力するか貼り付けます。結果は入力に合わせて更新されます。リストの場合は「各行を個別に」にチェックを入れます。
  3. デコードに失敗した場合はメッセージを読みます。位置と壊れたシーケンスが示されます。
  4. 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 用にエスケープし、&amp; のような参照を文字に戻し、エンティティの一覧表を検索できます。
  • JWT デコーダー — JWT のヘッダーとペイロードをデコードし、有効期限をわかりやすく表示し、HS・RS・PS・ES の署名を検証したり、新しいトークンに署名したりできます。何もブラウザの外に出ません。