URLエンコードとは何をしているのか
URLに使える文字は、英数字と一部の記号に限られています。日本語やスペース、「&」「?」「#」といった意味を持つ記号をそのまま入れると、URLの区切りとして誤解釈されてしまいます。
そこで、こうした文字を「%」+16進数の並びに置き換えるのがURLエンコード(パーセントエンコーディング)です。たとえば半角スペースは %20 になります。日本語は1文字が3バイト前後になるため、%E3%81%82 のように長い並びに変換されます。検索結果のURLが暗号のように見えるのはこのためです。
「全体」と「部分」でエンコードの範囲が違う
実装で最もつまずきやすいのがここです。URLをまるごとエンコードするのか、パラメータの値だけをエンコードするのかで、処理すべき文字が変わります。
- URL全体を扱う場合 — 「/」「?」「&」「:」などはURLの構造を作る文字なので、そのまま残す必要があります
- パラメータの値だけを扱う場合 — 「&」や「=」が値の中に含まれていると区切りと誤解されるため、これらもエンコードしなければなりません
検索キーワードなど、ユーザーが入力した文字列をURLに埋め込むときは後者です。ここを間違えると、「&」を含む検索語でパラメータが途中で切れる、という不具合になります。
日本語のURLをそのまま貼ると崩れる理由
ブラウザのアドレス欄は、読みやすさのために日本語をそのまま表示していることがあります。これをコピーして別の場所に貼ると、環境によってはエンコードされた長い形になったり、逆にリンクとして認識されなかったりします。人に渡すURLはエンコード済みの形にしておくと、環境による差が出にくくなります。
プラス記号とスペースの扱い
古い形式では、スペースを「+」で表すことがあります(フォーム送信時の形式)。一方、パーセントエンコーディングでは %20 です。「+」を使う形式でエンコードした文字列を、%20 の前提でデコードすると、スペースが「+」のまま残ります。文字化けとは違う形で崩れるので、原因に気づきにくい部分です。
入力内容は送信されません
変換はブラウザ内で行われます。APIキーや個人情報を含む文字列を扱っても、サーバーに送られることはありません。
よくある質問
- URLエンコードとは?
- URLで直接使えない文字(日本語やスペース、記号など)を「%」に続く英数字の並び(パーセントエンコード)に置き換えることです。たとえば全角の「あ」は「%E3%81%82」になります。ブラウザやサーバーがURLを正しく解釈するために使われます。
- エンコードとデコードの違いは?
- エンコードは読める文字を「%xx」形式に変換すること、デコードはその逆で「%xx」形式を元の読める文字に戻すことです。用途に合わせてボタンを使い分けてください。
- プラス(+)はどう扱われますか?
- デコード時は、古いフォームで使われる「+=スペース」の慣習に合わせて、+を半角スペースとして戻します。純粋なプラス記号を残したい場合はご注意ください。
- 入力した内容は送信されますか?
- いいえ。変換はすべてお使いのブラウザの中だけで行われ、入力内容がどこかに送信・保存されることはありません。安心してお使いいただけます。