URLエンコード/デコード完全ガイド|%20と+の違い・二重エンコードまで
公開日:2026年7月19日 更新日:2026年8月30日 運営:シルギア(Analyzegear, Inc.) 対象ツール:URL エンコード/デコード
URL(Webアドレス)に使える文字は英数字と一部の記号に限られているため、日本語やスペース、多くの記号をそのままリンクやクエリパラメータに入れることはできません。そこで必要になるのがパーセントエンコード(URLエンコード)です。この記事では仕組みから、方式の違い、スペースや記号のつまずきどころまでを、シルギアの「URLエンコード/デコード」ツールの具体的な変換結果とあわせて解説します。
パーセントエンコードの仕組み
パーセントエンコードは、対象の文字をいったんUTF-8のバイト列に変換し、各バイトを「%」+16進2桁の形(%XX)に書き換える処理です。URLは使える文字が決まっているため、範囲外の文字をこの安全な表記に逃がす、と考えると分かりやすいです。
1バイトの文字は %XX ひとつに、日本語のように複数バイトの文字は %XX%XX%XX のように連なります。たとえば半角スペースは %20、「東」「京」はそれぞれUTF-8で3バイトなので「東京」は %E6%9D%B1%E4%BA%AC になります。デコードはこの逆で、%の並びを読み取って元の文字へ戻します。往復させても、日本語を含め元のテキストへ正確に戻るのが正しい状態です。
encodeURI と encodeURIComponent の違い
エンコードには方式が2つあり、本ツールでは「値として(推奨)」と「URL 全体」に対応しています。両者の違いはURLの区切り記号を残すかどうかだけです。
- 値として(encodeURIComponent):? & = / : # などの区切り記号も含めてすべてエンコードします。クエリの「値」ひとつを変換する用途に向きます。
- URL 全体(encodeURI):: / ? # & = などは構造を保つために残し、日本語やスペースだけを変換します。
具体例で見ます。a b&c=d を「値として」変換すると a%20b%26c%3Dd になり、&や=まで無害化されます。一方 https://example.com/あ?q=a b を「URL 全体」で変換すると https://example.com/%E3%81%82?q=a%20b となり、://や?はそのまま残ります。クエリの値を組み立てるなら「値として」、既存のURLをまとめて整えるなら「URL 全体」、迷ったら安全側の「値として」を選ぶのが基本です。
スペースは %20 か「+」か(フォーム送信)
半角スペースの表し方には2通りあり、ここがよく混乱する点です。URLのパス部分やRFCに沿ったエンコードでは %20 を使います。一方、HTMLフォームの送信形式(application/x-www-form-urlencoded)では、歴史的にスペースを + で表します。検索フォームから送られるクエリ文字列に「+」が並ぶのはこのためです。
本ツールで「フォーム(+=空白)」を選ぶと、スペースを + に置き換えて出力します。たとえば 山田 太郎 は %E5%B1%B1%E7%94%B0+%E5%A4%AA%E9%83%8E になります。逆に、この形式の値を元に戻すときは、標準デコードでは + がそのまま残るため、デコード時に「+を半角スペースとして戻す」にチェックします。用途を取り違えると、スペースのはずが「+」として表示される失敗につながります。なお「+」という文字そのものを値に入れたいときは、% 経由の %2B で表します。
記号ごとの扱いと早見
「値として」で主な記号がどう変わるかの目安です。区切り記号を値に混ぜたいときは、必ずエンコードしないと意味が壊れます。
- 半角スペース → %20(フォーム形式では +)
- & → %26、= → %3D、? → %3F
- / → %2F、: → %3A、# → %23
- + → %2B、@ → %40、% → %25
注意したいのは、- _ . ! ~ * ' ( ) の記号はエンコードされず、そのまま残る点です。多くの用途では問題ありませんが、システムによっては ! や ' の扱いが異なることがあるため、受け取り側の仕様に不安があるときは実際に往復テストして確認すると安全です。とくに値の中に & や = をそのまま置くと、そこでパラメータが切れて別のキーと誤解されるため、値のエンコードは省略できません。
二重エンコードに注意
もっとも多い失敗が二重エンコードです。すでにエンコード済みの文字列を、もう一度エンコードしてしまう状態を指します。カギは「%」自体もエンコード対象で %25 になることです。たとえばスペースの %20 をさらにエンコードすると、先頭の % が %25 に変わり %2520 という別物になります。これをそのままリンクにすると、相手側では「%20」という文字列として復元され、スペースには戻りません。
防ぐコツは、生の値を1回だけエンコードすることです。すでに %XX を含む文字列を見たら、それは変換済みかもしれないと疑い、二重にかけないようにします。判断に迷ったら、いったんデコードして人が読める形に戻してから、必要な範囲だけを1回エンコードし直すと確実です。ライブラリがURLを組み立てる場面では、手動で先にエンコードした値を渡すと二重になりがちなので、どちらが担当するかを決めておきます。
このツールでの手順とよくある失敗
- 上部のトグルで「エンコード」か「デコード」を選びます。
- エンコードなら範囲を「値として」「URL 全体」「フォーム」から選びます。
- テキストやURLを入力・貼り付けすると、その場で自動変換されます。
- フォーム送信の値を戻すときは「+を半角スペースとして戻す」にチェックします。
- 「結果をコピー」で変換結果をクリップボードへコピーします。
デコードで「正しくエンコードされた文字列ではありません」と出るときは、%の後ろが16進2桁になっていない、または途中で切れているのが原因です。エンコード済みの完全な文字列を貼り付け直してください。処理はすべてブラウザ内で完結し、入力が外部へ送信されることはありません。エンコードもデコードもその場で確認できるので、URLに日本語や記号を含めたいときの手元の確認用にお使いください。