COLUMN
URLエンコードとは——「%20」の正体と、日本語URLが長くなる理由
リンクをコピーしたら「%E3%81%82%E3%81%84」のような長い文字列になっていた。検索結果のURLに「%20」が混ざっている。誰もが一度は見たことのあるこの「%付きの文字列」の正体が、URLエンコード(パーセントエンコーディング)です。
URLに使える文字は決まっている
URLの仕様では、そのまま使える文字が半角の英数字と一部の記号(-、_、.、~など)に限られています。スペースや日本語、「?」「&」「=」のようにURLの中で特別な役割を持つ記号は、そのまま置くと「どこまでがアドレスで、どこからがデータか」が曖昧になってしまいます。
そこで、使えない文字は「%+16進数の番号」に置き換えるルールになっています。スペースは番号が16進で20なので「%20」に、「あ」はUTF-8で3バイト(E3 81 82)なので「%E3%81%82」になります。日本語のURLをコピーすると急に長くなるのは、1文字が3つの%付きコードに展開されるからです。
「+」がスペースになることもある
検索フォームから送られたURLでは、スペースが「%20」ではなく「+」になっていることがあります。これはフォーム送信の古い慣習によるもので、同じスペースでも文脈によって表現が2通りあるのが紛らわしいところです。プログラムでURLを組み立てるときにこの違いを意識しないと、「+」がスペースに化ける・化けないのバグにつながります。
エンコードとデコードを試してみる
仕組みは、実際に変換してみるのが一番早く腹落ちします。当サイトのエンコード・デコードでは、任意のテキストのURLエンコードとデコード(元に戻す変換)をブラウザ内で試せます。「こんにちは」がどんな%列になるか、逆に長い%列が何と書いてあるのかを、その場で確認できます。入力はサーバーに送信されないため、業務のURLでも安心です。