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ïve2バイトのUTF-8シーケンス%C3%AFが1文字のïに戻ります。
50% off(コンポーネント)50%25%20offリテラルの%自体を%25にエンコードしないと、後続部分を誤って解釈されます。

URLをエンコード・デコードする方法

  1. モードを選びます。単一の値はコンポーネント、完全なアドレスは完全なURL、元に戻す場合はデコードです。
  2. テキストまたはURLを入力欄に貼り付けます。
  3. 「変換」をクリックすると、結果が出力欄にすぐ表示されます。
  4. 出力を必要な場所へコピーするか、「クリア」でやり直します。

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も端末の外に出ません。