URL エンコード・デコード
URL やクエリ文字列をパーセントエンコード・デコードし、URL を各部分に分解します。 処理はすべて端末内で完結し、アップロードは一切ありません。
- 入力
- Text · URL
- 出力
- Encoded · decoded · parsed parameters
単一の値やパスの区間用:& = ? / # もエンコードします。
テキスト
40 文字
エンコード済み
76 文字
Caf%C3%A9%20%26%20cr%C3%A8me%3F%2050%25%20off%20%2F%20today%20only%20%23deal
URL のエンコードとデコード、そして URL 全体の解析
この URL エンコーダー・デコーダーは、入力と同時にテキストとパーセントエンコーディングを相互変換します。Web で実際に使われている 3 種類の方式に対応しています。デコーダーは、実際のログによくある壊れた入力、たとえば紛れ込んだ % や途中で切れた UTF-8 シーケンスにも対応し、その場所を正確に示します。URL 解析機能は任意のアドレスを各部分に分解し、クエリ文字列を表として編集できます。すべてブラウザ内でローカルに動作します。
URL エンコード・デコードの方法
- エンコード、デコード、URL 解析のいずれかを選びます。
- エンコードする場合は方式を選びます。クエリの値やパスの 1 区間ならコンポーネント、アドレスを壊さずに整えるならURL 全体、HTML フォームの送信と同じにするならフォームです。
- デコードする場合は、
+をスペースとして扱うかを決めます。クエリ文字列とフォームの本文ではスペースを意味しますが、パスでは意味しません。 - 結果をコピーするか、入力に戻して往復の変換を確認します。URL 解析では、クエリパラメータを編集・追加・削除すると URL が再構成されます。
パーセントエンコーディングの役割
URL に使えるのは限られた ASCII 文字だけで、その一部には役割があります。/ はパスの区切り、? はクエリの開始、& と = はパラメータの区切り、# はフラグメントの開始です。それ以外の文字や、データとして使われる予約文字は、その UTF-8 の各バイトについて % と 16 進数 2 桁で書き表します。スペースは %20、& は %26 になり、UTF-8 で 2 バイトの é は %C3%A9 になります。
これを間違えるのは典型的なバグです。「salt & pepper」の検索が「salt 」としか届かないのは、エンコードされていない & が新しいパラメータを始めてしまったためです。
encodeURIComponent、encodeURI、フォームエンコードのどれを使うか
- コンポーネント(encodeURIComponent)
- 英字、数字、- _ . ! ~ * ' ( ) 以外をすべてエンコードします。クエリの値、パスの 1 区間、パラメータとして渡すリダイレクト URL など、URL の一部分に使います。10 回中 9 回はこれが正解です。
- URL 全体(encodeURI)
- URL の構造を作る文字(: / ? # & = など)はそのままにし、スペースや非 ASCII 文字などそれ以外をエンコードします。有効にしたい完全なアドレスに使い、単一の値には決して使わないでください。値の中の & や = はエンコードされません。
- フォーム(application/x-www-form-urlencoded)
- フォーム送信時にブラウザが送る形式で、URLSearchParams が生成する形式でもあります。スペースは + になり、英字、数字、* - . _ だけがそのまま残ります。
デコード、+ 記号、不正なシーケンス
+ がスペースを意味するのはクエリ文字列とフォームの本文の中だけで、パスでは文字どおりのプラス記号です。そのためデコードでは推測せず、+ をスペースにのスイッチを用意しています。デコードした値でスペースのはずの場所にプラス記号が表示される場合は、オンにしてください。
JavaScript の decodeURIComponent は、後に 16 進数 2 桁が続かない最初の %(「100%」だけでも該当します)や、Latin-1 でパーセントエンコードされたテキスト(é が %E9)のような有効でない UTF-8 のバイト列で「URI malformed」エラーを出します。このデコーダーはそこで止まらず、有効な部分はすべてデコードし、壊れた部分はそのまま残して、長いログの行の中でも見つけられるよう、それぞれを行と列付きで一覧表示します。
URL を読み取り、編集する
解析機能は、任意の絶対 URL のプロトコル、認証情報、ホスト、ポート、パス、クエリ、フラグメントを、読みやすいようにデコードして表示します。クエリパラメータはキーと値の表として表示され、値を変えたり、パラメータを追加・削除したりすると、正しいエンコードで URL 全体が再構成されます。utm_source などのトラッキングパラメータを取り除いたり、長いリダイレクトリンクが実際にどこを指しているかを確かめたりするのに便利です。
その他のエンコードについては、Base64 エンコーダーや、URL ではなく HTML 用にテキストをエスケープする HTML エンティティ変換をご覧ください。
よくある質問
- URL エンコードとは何ですか?
- URL エンコード(パーセントエンコーディング)は、URL で使えない文字や特別な意味を持つ文字を、その UTF-8 の各バイトについて % と 16 進数の値に置き換えることです。スペースは %20、& は %26 になります。
- スペースは %20 と + のどちらでエンコードすべきですか?
- 場所によってどちらも正しいです。%20 はどこでも使えます。+ がスペースを意味するのはクエリ文字列とフォーム送信の中だけで、フォームエンコードはこちらを生成します。パスでは + は文字どおりのプラス記号です。
- encodeURI と encodeURIComponent の違いは何ですか?
- encodeURIComponent は / ? & = # などの予約文字をエンコードするので、URL の中の単一の値に使います。encodeURI はそれらをそのままにするので、構造を保つ必要がある完全な URL に使います。
- 「URI malformed」エラーが出るのはなぜですか?
- 入力に、後に 16 進数 2 桁が続かない % か、有効な UTF-8 ではないパーセントエンコードされたバイト列が含まれています。このツールはそれ以外の部分をデコードし、問題のある場所をそれぞれ示します。
- URL パラメータをデコードするには?
- URL を「URL 解析」に貼り付けると、すべてのクエリパラメータがデコードされて表に表示されます。または、クエリ文字列だけを「デコード」に貼り付け、「+ をスペースに」をオンにしてください。
- URL でエンコードしなくてよい文字はどれですか?
- 英字の A 〜 Z と a 〜 z、数字、そして - . _ ~ は常に安全です。それ以外の文字は、URL の構造の一部ではなくデータである場合はエンコードすべきです。
- URL はどこかに送信されますか?
- いいえ。エンコード、デコード、解析はブラウザ内で行われるので、トークンや個人データを含む URL がお使いの端末の外に出ることはありません。