URLエンコード/デコードツール

URLまたは単一のURLコンポーネントをパーセントエンコードまたはデコードします。入力するとリアルタイムに反映され、入力内容はどこにも送信されません。

コンポーネント vs 完全URI

エンコードする文字が異なります。

コンポーネントエンコードは、URLの1つのセグメント内で安全でないすべての文字をエスケープします。&=?を含みます。クエリパラメータの値に使用してください。完全URIエンコードは、完全なURL内で構造的な意味を持つため、これらの文字をそのまま残します。一部分ではなくアドレス全体をエンコードする場合に使用してください。

そもそもなぜURLをエンコードするのか

URLに使用できるASCII文字は限られています。スペース、アクセント付き文字、絵文字、&#のような予約記号は、リンクの一部として渡される際にリンクを壊さずに済むよう、パーセントエンコード(スペースなら%20など)する必要があります。

仕組み

エンコードはブラウザ自体のencodeURIComponentまたはencodeURI関数を呼び出します。これはJavaScriptコードが使用するのと同じ関数なので、出力はブラウザやHTTPライブラリが生成するものと完全に一致します。安全でない各バイトは、そのUTF-8エンコーディングのパーセント記号と16進数2桁に変換されます。スペースは%20になり、マルチバイト文字は複数のエスケープシーケンスに展開されます(éは%C3%A9)。

2つのエンコードモードが存在するのは、「URLをエンコードする」ということが2つの異なる意味を持つためです。コンポーネントモードは、文字、数字、少数の安全な記号を除くすべてをエスケープします。/ ? & = :を含みます。これはクエリ文字列に入る単一の値に必要なもので、そうしないと値の中のアンパサンドがパラメータを2つに分割してしまいます。完全URLモードは構造的な文字をそのまま残し、完全なURLが機能し続けるようにし、生の形で全く出現できない文字だけをエスケープします。URL全体にコンポーネントエンコードを使うと壊れます。パラメータ値に完全URLエンコードを使うとインジェクションのバグにつながります。習慣ではなく、何をエンコードしているかで選んでください。

デコードモードはdecodeURIComponentを実行しますが、1つ実用的な処理が追加されています。プラス記号が先にスペースに変換されます。これは、HTMLフォームエンコーディング(クエリ文字列でよく見るapplication/x-www-form-urlencoded形式)が歴史的にスペースを+として書いてきたためです。不正な入力、例えば16進数2桁が続かない孤立した%があるとURIErrorが発生しますが、ツールはこれを捕捉して報告し、中途半端にデコードされたテキストを表示することはありません。一度デコードしてもまだ%25xxのようなシーケンスが残っている場合、その文字列は二重にエンコードされています。もう一度デコードにかけてください。

どちらの方向も、タブ内での組み込み関数の単純な呼び出しです。入力中、DevToolsのNetworkパネルには一切通信が表示されないため、機密情報を含むトークンやURLはあなたのマシン内にとどまります。