URL エンコード / デコード

URLエンコード(パーセントエンコーディング)は、URL中で使用できない文字や特殊な意味を持つ文字を %XX 形式に変換する技術です。日本語・スペース・記号などを安全に URL に含めるために使われます。このツールでは encodeURIComponent(クエリパラメータ向け)と encodeURI(URL全体向け)の2方式に対応しています。

URLエンコード(パーセントエンコーディング)とデコードをブラウザ内で即座に実行。encodeURIComponent / encodeURI の両方式に対応。日本語・絵文字も正しく変換できます。

! ' ( ) * - . 0-9 A-Z _ a-z 以外をすべてエンコードします。クエリパラメータの値を URL に埋め込む場合に使います。

履歴がありません

使い方ガイド

以下の手順で URL エンコード・デコードを行えます。

  1. 「エンコード」または「デコード」のモードを選択してください。
  2. エンコードモードの場合、用途に応じてエンコード方式を選択します。クエリパラメータには「encodeURIComponent」、URL全体には「encodeURI」を使います。
  3. 入力欄にテキスト(エンコード時)または URL エンコード済み文字列(デコード時)を貼り付けてください。
  4. 「変換する」ボタンをクリックすると結果が表示されます。
  5. コピーボタンで結果をクリップボードにコピーできます。

すべての処理はブラウザ内で完結します。入力した文字列が外部サーバーに送信されることはありません。

URL エンコード(パーセントエンコーディング)とは

URL エンコード(パーセントエンコーディング)は、URL に含められない文字や特殊な意味を持つ文字を「%XX」形式(XX は16進数の文字コード)に変換する仕組みです。RFC 3986 で定義されており、日本語・スペース・記号などを HTTP リクエストで安全に送信するために使われます。たとえば「日本語」は「%E6%97%A5%E6%9C%AC%E8%AA%9E」に変換されます。

JavaScript には URL エンコードの関数が2種類あります。encodeURIComponent は「A〜Z・a〜z・0〜9・-・_・.・!・~・*・'・(・)」以外の文字をすべてエンコードします。クエリパラメータの値など、URL の一部として埋め込む場合に適しています。一方 encodeURI は URL の構造を維持するために「:・/・?・#・[・]・@・!・$・&・'・(・)・*・+・,・;・=」をエンコードしません。URL 全体を安全にエスケープしたいときに使います。

デコードは JavaScript の decodeURIComponent で行います。%XX 形式の文字列を元のテキストに戻します。なお、スペースを「+」で表現する application/x-www-form-urlencoded 形式にも対応するため、このツールでは「+」を自動的にスペースに変換してからデコードします。

スペースが「+」になった経緯

HTML フォームが登場した1990年代初頭、Web のデータ転送にはメール用の MIME 規格が広く使われていました。MIME のエンコード方式の一つ quoted-printable では、行末のスペースがメールサーバーに削除されてしまう問題への対応として、スペースを「+」で表す慣習があったようです。この慣習が HTML フォームの仕様にも引き継がれたとされています。

1995年の RFC 1866(HTML 2.0)でフォームの仕様が定義される際、この慣習が採用されました。フォームデータの送信形式「application/x-www-form-urlencoded」はスペースを「+」に変換するルールになっています。

一方、2005年制定の RFC 3986(URI の一般構文)では「+」はスペースではなくリテラルの「+」と定義されています。つまり「+はスペース(フォーム送信)」と「+は+(URI の一般ルール)」という2つの解釈が Web に共存しており、どちらが適用されるかはコンテキスト次第です。

この違いは現代の開発でも顔を出します。JavaScript の encodeURIComponent() はスペースを「%20」に変換しますが、URLSearchParams は「+」を使います。PHP でも urlencode() は「+」、rawurlencode() は「%20」と挙動が違います。同じスペースなのに表現が分かれるのは、こういった経緯があるためのようです。

%20 の「20」は ASCII コード

URL エンコードの「%XX」の XX は、その文字の UTF-8 バイト値を16進数で表したものです。スペースは ASCII コード 32番で、32 の16進数は 20 → 「%20」。「!」は 33番 → 21 → 「%21」、「#」は 35番 → 23 → 「%23」という対応です。

ASCII(American Standard Code for Information Interchange)は1963年に策定された文字コード規格です。0〜31 は制御文字、32〜126 は印字可能な文字という区分になっています。スペースが 32番(印字可能文字の先頭)なのは、タイプライターでスペースを打つと印字ヘッドが1文字分動くという物理的な設計に由来するらしいです。

ASCII は128文字しかカバーしておらず、日本語は対象外です。後に策定された UTF-8 では日本語の漢字・ひらがな・カタカナは1文字あたり3バイトで表現されます。URL エンコードは1バイト = 「%XX」の3文字なので、日本語1文字 → 3バイト → 9文字という計算になり、「日本語」の3文字がエンコードすると27文字になります。

「日」の UTF-8 バイト列は E6、97、A5 で、パーセントエンコードすると「%E6%97%A5」。「本」は「%E6%9C%AC」、「語」は「%E8%AA%9E」です。「日本語」の完全なエンコード結果が「%E6%97%A5%E6%9C%AC%E8%AA%9E」になるわけです。

実用例:URL エンコードが使われる場面

URL エンコードは Web 開発・API 連携・データ送信など幅広い場面で登場します。正しく理解することで、エンコード忘れや二重エンコードによるバグを防ぐことができます。

検索クエリパラメータの生成
フォームの検索ボックスに日本語を入力すると、ブラウザが自動的に URL エンコードして送信します。手動で URL を組み立てる場合は encodeURIComponent を使い、「?q=日本語」ではなく「?q=%E6%97%A5%E6%9C%AC%E8%AA%9E」という形式にする必要があります。スペースは「%20」または「+」に変換されます。
API リクエストの URL パラメータ
REST API でパスパラメータやクエリパラメータに特殊文字を含む値を渡す場合、encodeURIComponent でエンコードしないと「/」や「?」などが URL の区切り文字として解釈され、意図しないエンドポイントにリクエストが送られることがあります。このツールで事前にエンコード結果を確認することで、実装ミスを防げます。
メールリンク・SNS シェア URL の作成
mailto: リンクの本文(body)や SNS のシェア URL には、テキストを URL エンコードして埋め込む必要があります。例えば「subject=お問い合わせ」と書く場合は「subject=%E3%81%8A%E5%95%8F%E3%81%84%E5%90%88%E3%82%8F%E3%81%9B」にエンコードします。このツールで素早くエンコードしてコピーすることで、手作業でのエラーを防ぎます。
サーバーログ・アクセスログの解析
Web サーバーのアクセスログには URL エンコードされたリクエストパスが記録されます。「%E3%83%86%E3%82%B9%E3%83%88」のような文字列をデコードすることで、ユーザーが実際に入力した文字列を確認できます。このツールにペーストするだけで即座にデコードできるため、ログ解析の手間を大幅に削減できます。
OAuth・JWT などの認証フロー
OAuth 2.0 の認可リクエストには redirect_uri や scope などのパラメータが URL エンコードされて含まれます。認証フローのデバッグ時に、ブラウザのアドレスバーに表示される URL をデコードすることで、パラメータの内容を素早く確認できます。またコールバック URL にエラーコードが付与された場合も、デコードすることで原因を特定しやすくなります。

URL エンコードは Web の基礎技術のひとつです。二重エンコード(すでにエンコードされた文字列を再エンコードしてしまう)や、エンコード方式の選択ミス(encodeURI と encodeURIComponent の混同)は実際のバグの原因になりやすいため、このツールで動作を確認しながら実装を進めることをおすすめします。

よくある質問

日本語や絵文字もエンコードできる?
はい、対応しています。このツールは JavaScript の encodeURIComponent / encodeURI を使用しており、内部で UTF-8 バイト列に変換してからパーセントエンコードします。日本語・中国語・韓国語・絵文字などのマルチバイト文字も正しくエンコード・デコードできます。
encodeURIComponent と encodeURI の違いは?
encodeURIComponent はアルファベット・数字・ハイフン・アンダースコア・ピリオドなど一部の文字を除いてすべてエンコードします。URL のクエリパラメータの値など、URL の「一部」に埋め込む際に使います。encodeURI は URL の構造を壊さないよう「:」「/」「?」「#」などをエンコードせず残します。URL 全体を安全にエスケープしたいときに使います。
入力データはサーバーに送信されるの?
送信されません。エンコード・デコードはすべてブラウザ内の JavaScript で実行されます。機密情報を含む文字列も安全にご利用いただけます。
デコードに失敗するのはなぜ?
%XX の XX 部分が有効な16進数でない場合や、マルチバイト文字のエンコードが途中で切れている場合にデコードが失敗します。またスペースを「+」で表す form-urlencoded 形式の文字列は、このツールでは「+」を自動的にスペースとして扱います。それでもエラーになる場合は、入力が正しい URL エンコード文字列かどうか確認してください。

Base64エンコード/デコードはこちら

バイナリデータやテキストデータをBase64形式に変換・復元するツールも用意しています。URLセーフBase64にも対応しています。

Base64変換