てがるツール

Webページを見ているとき、アドレスバーに %E3%81%82 のような文字列が表示されることがあります。これはURLエンコード(パーセントエンコーディング)と呼ばれる変換です。日本語や特殊文字をURLで安全に扱うための仕組みです。

「なぜこんな変換が必要なのか」——理由を知ると、Webの動作についての理解が深まります。

URLで使える文字と使えない文字

URLで使用できる文字はRFC(インターネット標準仕様)によって厳密に定められています。英数字(A-Z、a-z、0-9)と一部の記号(-_.~)は「非予約文字」として、そのままURLに含めることができます。

一方、?&=#/などはURLの構造的な意味を持つ「予約文字」です。これらをデータとして含めたいときは、エンコードが必要になります。日本語や絵文字などの非ASCII文字も、そのままではURLに含められません。

パーセントエンコーディングの仕組み

URLエンコードでは、使えない文字を %XX の形式に変換します(XXは16進数2桁)。具体的には文字をUTF-8でバイト列に変換し、各バイトを % と16進数で表します。

元の文字UTF-8バイト列URLエンコード後
E3 81 82%E3%81%82
スペース20%20(または +
&(アンパサンド)26%26
=(イコール)3D%3D

「あ」は3バイトのUTF-8文字のため、URLエンコード後は %E3%81%82 の9文字になります。

実務でURLエンコードが必要になる場面

  • クエリパラメータに日本語を含める場合:検索フォームで日本語を入力してURLを見ると、?q=%E6%A4%9C%E7%B4%A2 のようになります。これはブラウザが自動的にエンコードしているためです。
  • APIリクエストを手動で組み立てる場合:プログラムでURLを生成するとき、パラメータ値を手動でエンコードしないと、&= が区切り文字として誤解釈されます。
  • URLをテキストとして別のURLに含める場合:リダイレクト先URLをパラメータとして渡すとき、URLをそのまま入れると構造が崩れます。
  • ファイル名のURLエンコード:日本語ファイル名を含むリンクを生成するとき、エンコードが必要になります。