ToolActToolAct

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

URLエンコードとデコードを高速処理、複数エンコードモード対応

入力内容
文字数: 0
バイト数: 0
変換結果
文字数: 0
バイト数: 0

変換方法を選択

URLエンコードとは?

URLエンコード(パーセントエンコーディングとも呼ばれる)は、文字をURLで安全に送信できる形式に変換する仕組みです。URLはASCII文字セットの特定の文字しか含められないため、それ以外の文字(日本語、スペース、特殊記号など)は%XX形式にエンコードする必要があります。XXは文字の16進数値です。 例:スペースは%20に、漢字「あ」は%E3%81%82にエンコードされます。

使い方

使い方

  1. エンコード/デコードするテキストを入力欄に入力または貼り付けてください
  2. エンコード方式(encodeURIComponentまたはencodeURI)を選択してください
  3. 結果は自動的に表示され、ワンクリックでコピーや入力/出力の入れ替えができます
  4. デコードの場合は、対応するデコード方式を選択してください

URLのコンテキスト

  • クエリ値やパスセグメントにはコンポーネントエンコーディングを使用してください。誤った関数でURL全体をエンコードすると、/、?、&などの区切り文字が壊れる可能性があります。
  • デコード時には、%2520のような二重エンコードを確認してください。これはパーセント記号が再度エンコードされたことを意味します。

利用シーン

クエリパラメータを安全にエンコード値をURLのクエリパラメータ、パスセグメント、フォームライクなペイロードに含める場合はencodeURIComponentモードを使用します。encodeURIよりも積極的に予約文字をエンコードし、文字数とバイト数の両方を表示します。この結果は、疑問符の後ろやJSON Pointerセグメント内のほとんどのサーバーサイドパーサーが期待する形式です。
URL全体をエンコードまたはデコードURL全体を扱い、: / ? &などの区切り文字の構造的な意味を保持したい場合は、encodeURIまたはdecodeURIに切り替えます。コンポーネントモードとフルURIモードは別々に管理されており、誤った過剰エンコードを防ぎます。入力がすでにURLのようであり、ユーザーデータ部分だけを厳密に処理したい場合に適した選択肢です。
パーセントエスケープから読みやすいテキストを復元コンポーネントまたはフルURI文字列をデコードし、有効な出力を反対モードで入力にスワップします。不正なパーセントシーケンスによる変換エラーは出力に表示され、スワップがブロックされるため、不完全な%XXが後のコピーペーストに混入することを防ぎます。%2520のような二重エンコードされたフラグメントは、ネストされたエスケープとして表示され、2回目のデコードパスが必要です。
エンコードされたフォームボディを確認application/x-www-form-urlencodedビューに切り替えて、空白に対する'+'と'%20'の違いを確認し、DevToolsからコピーしたx-www-form-urlencodedペイロードをデコードして元のキーを復元できます。POSTリクエストのボディを読み、フォームがクライアントJavaScriptの意図した内容を実際に送信したことを確認するのにも役立ちます。RFC 3986はフォームボディに別のルールを予約しているため、多くのAPIでは'+'がそのまま残ります。
RFC 3986に基づく予約文字と非予約文字の区別厳密なAPIからの400エラーや署名の不一致をデバッグする場合、最初のステップは各バイトが予約文字セット(gen-delims: / ? # [ ] @ およびsub-delims: !$&'()*+,;=)と非予約文字セット(A-Z a-z 0-9 - . _ ~)のどちらに属するかを確認することです。クエリ値では予約文字にパーセントエンコーディングを使用し、パスセグメントでは'/'を構造文字として扱います。空白に%20を使用するかフォームボディに'+'を使用するかは、エンコードされた値が配置される場所に直接従うため、同じ文字列がURLのスロットによって3つの異なるエンコーディングで合法的に出現することがあります。

仕組み

URLエンコーディング(パーセントエンコーディング)はRFC 3986 §2.1で定義されており、文字を%XX形式に変換します。XXはUTF-8におけるバイト値の2桁大文字16進数表現です。RFCは2つの文字クラスを定義しています:未予約文字(A-Z a-z 0-9 - _ . ~)は常にエンコードされず、予約文字(gen-delims : / ? # [ ] @ と sub-delims ! $ & ' ( ) * + , ; =)は文脈に応じてエンコードが変わります。予約文字はURLの一部では構造的な意味を持ちますが、データとして扱う場合はリテラルとして入力されます。 JavaScriptには2つのスコープが異なる組み込み関数があります。encodeURIComponent()はA-Z a-z 0-9 - _ . ! ~ * ' ( ) 以外のすべての文字をエンコードし、個別のクエリパラメータ値、パスセグメント、フラグメント識別子のエンコードに適しています。encodeURI()はさらに構造文字 : / ? # [ ] @ ! $ & ' ( ) * + , ; = を保持し、URI全体の構文構造を維持したままエンコードするために設計されています。重要な区別として、encodeURIComponent()は/と&をエンコードするためURL全体に適用すると構造が壊れるのに対し、encodeURI()はこれらを保持します。 スペース処理は最も一般的な相互運用性の落とし穴です。RFC 3986はスペース文字(U+0020)の正規のパーセントエンコーディングとして%20を指定しています。しかし、application/x-www-form-urlencoded MIMEタイプ(HTML 4.01以降のHTMLフォーム送信で使用)ではスペースを+としてエンコードします。この2つは互換性がありません:%20を期待するサーバーは+をリテラルとして解釈し、+を期待するサーバーは%20をパーセント記号に続く20として扱います。本ツールはRFC 3986に準拠する%20を生成するencodeURIComponent()を使用しています。x-www-form-urlencodedペイロード(POSTボディやレガシーミドルウェアがパースするクエリ文字列)をデコードするユーザーは、この違いを理解しておく必要があります。 マルチバイト文字の処理は自動的に行われますが、理解しておく価値があります。入力文字列はまずUTF-8バイトにエンコードされ、各バイトが個別にパーセントエンコードされます。CJK文字「你」(U+4F60)は3バイトのUTF-8(E4 BD A0)を占め、%E4%BD%A0を生成します。サーバーがGBKなどの異なる文字セットでパースすると、同じ文字は%C4%E3(2バイト)にエンコードされ、双方がUTF-8に同意していない限りデコード結果は文字化けします。二重エンコードも一般的なバグです:%2520はリテラルのパーセント記号(%25)に続く20を意味し、入力がすでにパーセントエンコードされていて2回目のエンコードが行われたことを示します。デコードモードでは不正なシーケンス(不完全な%XX)を検出し、サイレントにゴミを生成するのではなくエラーを表示します。

  • encodeURIComponentとencodeURIの違い:encodeURIComponentは/ ? & #をエンコードし、クエリ値、パスセグメント、フラグメントに正しい選択です。encodeURIはこれらの構造文字を保持し、フルURLに正しい選択です。間違った関数を使用することは、URLエンコーディングで最も一般的なバグです。
  • RFC 3986の予約文字セット:gen-delims(: / ? # [ ] @)はURL構文を持ち、sub-delims(! $ & ' ( ) * + , ; =)はURLコンポーネントによって区切り文字またはデータになります。文脈が予約文字をパーセントエンコードするかどうかを決定します。
  • スペースエンコーディング:RFC 3986の正規形式は%20(encodeURIComponentが生成)、application/x-www-form-urlencodedは+(HTMLフォームのデフォルト)を使用します。この2つは意味的に互換性がなく、混在させるとサーバー側パーサーが壊れます。
  • UTF-8マルチバイトエンコーディング:「你」(U+4F60)→ UTF-8バイト E4 BD A0 → %E4%BD%A0(3つのパーセントエンコードされたオクテット)。GBKでは同じ文字が%C4%E3(2オクテット)になります。非ASCIIテキストではクライアントとサーバーの文字セットの一致が必須です。
  • 二重エンコードの検出:%2520は最初に%20にデコードされ、次にスペースにデコードされます。デコードモードの出力がこのパターンを明らかにします。%ZZや%2(不完全)のような不正なシーケンスは検出されてエラーとして報告されます。
  • IRI(RFC 3987):国際化リソース識別子はURLにUnicode文字を直接含めることを許可します。ブラウザはアドレスバーにデコードされた形式を表示しますが、ワイヤ上ではパーセントエンコードされたUTF-8形式で送信します。ツールのエンコードモードはHTTP上に実際に送信される内容を表示します。
  • decodeURIComponentのエラー処理:不完全なパーセントシーケンス(%の後に2桁未満の16進数)を含む文字列を渡すとURIErrorがスローされます。ツールは呼び出しをtry/catchでラップし、サイレントに空文字列を返すのではなくエラーメッセージを表示します。

使用例

中国語文字のエンコード(UTF-8 パーセントエンコーディング)

入力:  你好世界(CJK 4文字、UTF-8 で12バイト)
出力: %E4%BD%A0%E5%A5%BD%E4%B8%96%E7%95%8C

各 UTF-8 バイト(E4、BD、A0...)が %XX になる
RFC: RFC 3986 セクション 2.1 が URI のパーセントエンコーディングを定義
用途: クエリパラメータ、パスセグメント、フォームデータの送信

クエリ文字列の区切り文字をエンコード

入力:  name=张三&age=20
出力: name%3D%E5%BC%A0%E4%B8%89%26age%3D20

%3D は '=' をエンコード(キーと値の区切り)
%26 は '&' をエンコード(パラメータ間の区切り)
RFC: RFC 3986 セクション 3.4 がクエリコンポーネントの予約文字を定義

完全な URL のエンコード(部分的エンコード)

入力:  https://example.com/search?q=你好&type=web
出力: https://example.com/search?q=%E4%BD%A0%E5%A5%BD&type=web

注意: スキーム、ホスト、既存の区切り文字はエンコードされない
非 ASCII のクエリ値のみがパーセントエンコードされる
RFC: RFC 3986 セクション 3 が階層的 URI コンポーネントを定義

スペース文字のエンコード(2つの規則)

パスセグメント:  %20 (RFC 3986 準拠)
クエリ文字列:  + (歴史的な HTML フォームの慣例)

例: /search for me -> /search%20for%20me
例: q=hello world -> q=hello+world

どちらも同じ結果にデコードされる。encodeURI は %20 を使用、encodeURIComponent はパスでは %20、実装によってはクエリで + を使用

よくある質問

URLエンコーディングは何をしますか?

URL内の安全でない文字を%シーケンスに置き換えます。スペース → %20、& → %26、# → %23 など。RFC 3986では、安全な文字(英数字に加え -、_、.、~)とエンコードが必要な文字をリストアップしています。ブラウザ、サーバー、HTTPライブラリは適切な境界でURLエンコーディングを適用または期待します。

encodeURIとencodeURIComponentの違いは何ですか?

encodeURIはURL構文文字(: / ? # & =)をそのまま保持します。URL全体を想定しているからです。encodeURIComponentはこれらもエンコードします。1つのパラメータ値を想定しているからです。本ページは両方のモードを公開しています。クエリパラメータにはコンポーネントエンコーディング、URL全体にはURIエンコーディングを使ってください。

なぜスペースは時々%20になり、時々+になるのですか?

%20はURI標準です。+はHTMLフォーム送信で使われるapplication/x-www-form-urlencoded MIMEタイプの古い慣例です。多くのサーバーには同じに見えますが、厳密には等価ではありません。最新のURLでは%20を使ってください。

Unicode文字をエンコードすべきですか?

RFC 3986はASCIIのみを許可するため、非ASCII文字はUTF-8エンコードしてからパーセントエスケープする必要があります(中 → %E4%B8%AD)。最新のブラウザはアドレスバーにUnicode形式を表示しますが、ネットワーク上ではエンコードされた形式を送信します。本ページはUTF-8エンコードのステップを自動で行います。

決してエンコードすべきでない文字は何ですか?

RFC 3986による予約されていない文字、すなわちA-Z、a-z、0-9、-、_、.、~です。これらをエンコードすることは技術的には許可されていますが、異なるURL文字列が生成されます。サーバーは正規化ルールに応じて、「a」と「%61」を等価として扱う場合と異なるとして扱う場合があります。

デコードしたURLに変な文字が含まれるのはなぜですか?

二重エンコードされている可能性があります。%2520は%20にデコードされ、さらにスペースにデコードされます。つまり誰かがURLを2回エンコードしたのです。その場合は2回デコードしてください。一部のサーバーは自動的に二重エンコードします。クライアントのエンコーディング動作を確認してください。

エンコードはローカルで行われますか?

はい。encodeURIComponentとdecodeURIComponentはブラウザ内で実行されます。URLはアップロードされません。

関連ツール

Base64 エンコードデコードツール

オンラインBase64エンコード・デコードツール。UTF-8テキスト、日本語、画像変換をサポート。リアルタイムエンコード・デコード、ソフトウェアインストール不要、データはローカル処理でプライバシー保護。

HTML エンティティエンコードツール

オンラインHTMLエンティティエンコード・デコードツール。特殊文字をHTMLエンティティに変換。XSS攻撃を防止し、HTMLコードの安全な表示を確保。

Unicode エンコード変換ツール

オンラインUnicodeエンコード・デコードツール。\uXXXX、&#xXXXX;など複数フォーマットの変換をサポート。国際化テキストを素早く処理し、エンコーディング問題を解決。

JSON エスケープツール

オンラインJSONエスケープツール。JSON文字列のエスケープ・アンエスケープを素早く処理。引用符、改行、タブなど特殊文字の変換に対応、コード埋め込みに便利。

QRコード生成器

オンラインQRコード生成ツール。テキスト、URL、名刺など複数タイプ対応。スタイル、色、サイズをカスタマイズし、ワンクリックで高画質画像をダウンロード。

IP アドレス検索ツール

オンラインIPアドレス確認ツール。ワンクリックでグローバルIPアドレスと位置情報(国、都市、ISPなど)を取得。