URIコンポーネントエンコーダー

name=John & Janeのような値をエンコードせずにURLに渡したことがあるなら、その苦労はご存じでしょう。&が新しいパラメーターとして読まれ、サーバーには意味不明なデータが届きます。このツールは、RFC 3986に従って任意の文字列をURIコンポーネントとして安全に使えるようパーセントエンコードし、すべての予約文字を%HHペアに変換します(空白を含む)。フラグメント、クエリ値、リダイレクト先を貼り付ければ、どのURLにも安全に連結できる結果が得られます。

URIコンポーネントのエンコード方法

  1. 1

    値を貼り付け

    単一のクエリパラメーター値、パスセグメント、またはフラグメント文字列を入力します。

  2. 2

    エンコードかデコードを選択

    方向を切り替えて、パーセントエスケープを元の文字に戻します。

  3. 3

    実行

    ツールは各文字をUTF-8でエンコードし、予約バイトをそれぞれ%HHに置き換えます。

  4. 4

    結果をコピー

    出力をそのままURLテンプレートやAPIクライアントに入れます。

エスケープされる文字

このエンコーダーはRFC 3986に従います。手つかずで残るのは非予約集合A-Z a-z 0-9 - _ . ~だけです。それ以外はすべてパーセントエンコードされたUTF-8になり、空白や、JavaScriptのencodeURIComponentなら残す下位区切り文字! * ' ( )も対象です。

文字 エンコード結果
スペース %20
! %21
# %23
& %26
' %27
( %28
) %29
* %2A
+ %2B
/ %2F
= %3D
? %3F
é %C3%A9

コンポーネントと完全なURIの違い

これはencodeURIとは異なります。encodeURIは: / ? # [ ] @ ! $ & ' ( ) * + , ; =をURLの構造要素としてそのまま残します。クエリ文字列に連結する値には厳格な形式が必要で、それがこのツールの出力です。! ' ( ) *さえエスケープし、JavaScriptのencodeURIComponentより一歩踏み込みます。

const url = `/search?q=${encodeURIComponent(userInput)}`;

よくある落とし穴

  • 二重エンコード: すでにエンコードされたものを再度エンコードすると、%20ではなく%2520になります。出所が不確かなときは必ず先にデコードしてください。
  • フォームのプラス記号: HTMLフォーム送信は空白を%20ではなく+としてエンコードします。RFC 3986を厳格に守るデコーダー(これも含む)は+を空白に戻しません。その場合はフォーム対応のデコーダーを使ってください。
  • パス区切り: ここで/をエンコードすると%2Fになります。本当のパス構造を保ちたい場合は、先にセグメントを結合してから各セグメントを個別にエンコードしてください。

よくある質問

これはRFC 3986のパーセントエンコード、つまり厳格な形式です。:、/、?、#やその他の予約文字(さらに!、'、(、)、*)をエスケープします。コンポーネントは内部にURL構造を持つべきではないからです。そのためJavaScriptのencodeURIComponentより厳格で、encodeURIよりはるかに厳格です。

%20がRFC 3986の方式です。空白の+はapplication/x-www-form-urlencodedのボディエンコードの名残です。URLのクエリ文字列では%20が常に安全で、+はフォームのPOSTで生成された場合にのみサーバー側で想定されます。

各文字をまずUTF-8でエンコードし、その後すべてのバイトをエスケープします。「日」のような文字は%E6%97%A5(3バイト)になります。

いいえ。値は結果を作るためにサーバー側でパーセントエンコードされ、保存もログ記録もされません。貼り付けた内容は応答の送信後に何も残りません。

関連ツール

このツールは他の言語でも利用できます