URLエンコーダー&デコーダー - URLとクエリ文字列を変換
URLやクエリ文字列用にテキストをパーセントエンコードしたり、エンコード済みURLを読めるテキストに戻したりできます。すべてブラウザ内で完結します。
モードを選び、テキストを貼り付けて「変換」をクリックします。クエリ文字列の値にはコンポーネントをエンコード、アドレス全体には完全なURLをエンコード、デコードではパーセントエンコード文字列を元に戻します。
URLエンコーダー&デコーダー - URLとクエリ文字列を変換
URLやクエリ文字列用にテキストをパーセントエンコードしたり、エンコード済みURLを読めるテキストに戻したりできます。すべてブラウザ内で完結します。
& = ? / #を含むすべての予約文字をエンコードします。クエリ文字列の単一値やパスセグメントに使います。
仕組み:非予約文字以外をUTF-8バイトに変換し、各バイトを%XXの16進数で置き換えます。コンポーネントのエンコードにはencodeURIComponent、完全なURLにはencodeURI、デコードにはdecodeURIComponentを使用します。
URLエンコーダーとデコーダーについて
URLで安全に扱える文字には限りがあります。すべてのウェブアドレスの基礎となるRFC 3986は、英字・数字と4つの記号- _ . ~からなる小さな非予約文字集合を定義しており、これらはどこにでも置けます。一方、? & = / #のような予約文字には構造上の意味があります。それ以外の文字は、単純な空白からアクセント付き文字やCJK文字まで、パーセントエンコードが必要です。文字をUTF-8バイトに変換し、各バイトを%と2桁の16進数で表します。このURLエンコーダーとデコーダーはその変換を双方向に即座に行い、すべてブラウザ内で処理するため、貼り付けた内容がサーバーに送信されることはありません。
このツールには3つのモードがあります。JavaScript自体が2種類のエンコード処理を区別するためです。コンポーネントのエンコードはencodeURIComponentを使い、すべての予約文字をエスケープします。検索語、リダイレクト先、トークン、クエリ文字列で=の後に置く値など、URLの一部分を作るときに適しています。値に&や=が含まれる場合、生のままだとパラメーターが分割されますが、エンコードすれば値を保てます。
完全なURLのエンコードはencodeURIを使い、すでに構造化されたアドレスを対象にします。空白、引用符、山括弧、非ASCII文字はエスケープしますが、: / ? & = #は意図的に残すため、スキーム、ホスト、パス、クエリの意味が維持されます。URL全体をコンポーネント用エンコーダーに通すと、スラッシュや疑問符まで変換されて構造が壊れます。
デコードはdecodeURIComponentで逆変換します。%20を空白に、%26をアンパサンドに戻し、%C3%BCのような複数バイトシーケンスをüに戻します。長い追跡リンクを読んだり、OAuthリダイレクトを調べたり、フォームが実際に送信した内容を確認したりするのに便利です。2桁の16進数が続かない%があれば、無意味な結果を返さず明確なエラーを表示します。
API呼び出しのクエリパラメーター作成、空白で壊れたリンクの修正、URLの入れ子、複雑なリダイレクトチェーンの確認などに使えます。ただし、パーセントエンコードは転送用の表記であり、セキュリティではありません。エンコード文字列は簡単に戻せるため、隠し情報として扱わず、デコード後の入力は必ずサーバー側で検証してください。
URLエンコードの例
3つのモードで予約文字、空白、非ASCII文字がどう扱われるかを確認します。
| 入力 | 出力 | 注記 |
|---|---|---|
| price=1+2(コンポーネント) | price%3D1%2B2 | =と+はクエリ文字列の予約文字なので、%3Dと%2Bにエスケープされます。 |
| https://example.com/my files/report 2024.pdf(完全なURL) | https://example.com/my%20files/report%202024.pdf | 空白は%20になり、スキームとスラッシュはそのまま残ります。 |
| na%C3%AFve(デコード) | naïve | 2バイトのUTF-8シーケンス%C3%AFが1文字のïに戻ります。 |
| 50% off(コンポーネント) | 50%25%20off | リテラルの%自体を%25にエンコードしないと、後続部分を誤って解釈されます。 |
URLをエンコード・デコードする方法
- モードを選びます。単一の値はコンポーネント、完全なアドレスは完全なURL、元に戻す場合はデコードです。
- テキストまたはURLを入力欄に貼り付けます。
- 「変換」をクリックすると、結果が出力欄にすぐ表示されます。
- 出力を必要な場所へコピーするか、「クリア」でやり直します。
URLエンコーダー&デコーダー FAQ
encodeURIComponentとencodeURIの違いは?
encodeURIComponentは/ ? & = #を含むすべての予約文字をエスケープするため、クエリパラメーターなど個々の値に使います。encodeURIは構造文字を残し、どこでも安全でない文字だけをエスケープするため、完全なURLに使います。ツールではそれぞれ「コンポーネントをエンコード」「完全なURLをエンコード」に対応します。
空白が+ではなく%20になるのはなぜ?
%20はURLにおける空白の標準的なパーセントエンコードです。+はHTMLフォームで使われる古いapplication/x-www-form-urlencoded形式の慣例で、クエリ文字列内だけに適用されます。このツールは常に%20を出力します。デコード時、+はそのままプラス記号として扱うため、フォームデータをデコードする前に+を%20へ置き換えてください。
デコードするとエラーになるのはなぜ?
%の後に有効な16進数2桁がないとdecodeURIComponentは例外を投げます。割引率のような文章中のリテラル%や、途中で切れた文字列が例です。入力が正しくパーセントエンコードされ、完全であることを確認してください。
アクセント、CJK、絵文字など非ASCII文字はどうエンコードされる?
まず文字をUTF-8バイト列に変換し、各バイトを%XXで表します。アクセント付き文字は通常2組、絵文字は4組のエスケープになります。デコード時にバイトを再構成してUTF-8として解釈し、元の文字を正確に復元します。
URL全体をコンポーネントとしてエンコードすべき?
いいえ。コンポーネント用エンコーダーはURLの構造を作るコロン、スラッシュ、疑問符をエスケープするため、アドレスが壊れます。完全なURLには「完全なURLをエンコード」を使い、コンポーネントは挿入する個々の値だけに使ってください。
貼り付けた内容はサーバーに送信される?
いいえ。変換はJavaScript組み込みのencodeURIComponent、encodeURI、decodeURIComponentを使ってブラウザ内だけで実行されます。トークン、セッションID、非公開パスを含むURLも端末の外に出ません。