URLエンコードとは?仕組みと使いどころをわかりやすく解説
Webサイトの長いURLをコピーしたとき、「%E3%81%82」のような不思議な文字列を見たことはありませんか?これは「URLエンコード」(パーセントエンコーディング)と呼ばれる処理の結果です。なぜこのような変換が必要なのか、どんな場面で使われるのかを解説します。
URLエンコードとは
URLに使える文字は限られている
URLに使える文字は、実はかなり限定されています。RFC 3986という国際的な規格で定められた「使用可能な文字」は以下の通りです。
- 英字:A-Z、a-z
- 数字:0-9
- 一部の記号:-(ハイフン)、_(アンダースコア)、.(ドット)、~(チルダ)
これ以外の文字——日本語はもちろん、スペースや「&」「=」「?」なども——URLにそのまま含めることはできません。そこで、これらの文字を「%XX」という形式に変換するのがURLエンコードです。
変換のルール
URLエンコードでは、文字をUTF-8でバイト列に変換し、各バイトを「%」に続く16進数2桁で表現します。
| 文字 | UTF-8バイト列 | エンコード結果 |
|---|---|---|
| あ | E3 81 82 | %E3%81%82 |
| 東京 | E6 9D B1 E4 BA AC | %E6%9D%B1%E4%BA%AC |
| スペース | 20 | %20(または+) |
| & | 26 | %26 |
| = | 3D | %3D |
たとえば「東京タワー」という文字列をURLエンコードすると、次のようになります。
エンコード後:%E6%9D%B1%E4%BA%AC%E3%82%BF%E3%83%AF%E3%83%BC
URLエンコード・デコードをサッと行うなら
URLエンコードツールを使ってみる →なぜURLエンコードが必要なのか
URLの構造を壊さないため
URLには「?」「&」「=」「/」などの記号が特別な意味を持っています。
このURLで「&」はパラメータの区切りを意味します。もし検索キーワード自体に「&」が含まれていたら(例:「AT&T」で検索)、ブラウザはどこまでがキーワードでどこからが次のパラメータか判断できなくなります。「&」を「%26」にエンコードすることで、この問題を防いでいます。
文字化けを防ぐため
日本語のような非ASCII文字は、サーバーやブラウザによって文字コードの解釈が異なる場合があります。URLエンコードによってUTF-8のバイト列に統一することで、どの環境でも同じ文字として解釈されるようになります。
セキュリティのため
ユーザーが入力したテキストをそのままURLに含めると、意図しないコードが実行される「インジェクション攻撃」の原因になります。URLエンコードは、こうした攻撃を防ぐための基本的な対策の一つです。
日常で出会うURLエンコードの場面
Google検索
Googleで「東京 天気」と検索すると、アドレスバーには次のようなURLが表示されます。
ブラウザのアドレスバーでは日本語のまま表示されることもありますが、URLをコピー&ペーストすると、エンコードされた形式になることがあります。
SNSでのリンク共有
日本語を含むURLをSNSで共有するとき、エンコードされた長いURLになってしまうことがあります。Twitterなどでは文字数を消費するため、短縮URLサービスを使うのが一般的です。
Webフォームの送信
お問い合わせフォームなどでテキストを送信するとき、フォームのデータはURLエンコードされてサーバーに送られます(GET送信の場合、URLの末尾にパラメータとして付加されます)。
URLエンコードとデコードの違い
URLエンコードとデコードは逆の処理です。
- エンコード:人間が読める文字 → %XX形式に変換
- デコード:%XX形式 → 人間が読める文字に復元
メールやチャットで受け取った「%E3%81%82…」のような文字列を元の日本語に戻したいときはデコードを使います。逆に、日本語をURLのパラメータに含めたいときはエンコードを使います。
URLエンコードでよくあるトラブル
二重エンコード
すでにエンコード済みの文字列をもう一度エンコードしてしまうと、「%25E3%2581%2582」のように「%」自体がエンコードされてしまいます。デコードしても元に戻らないので、エンコード済みかどうかを確認してから処理しましょう。
スペースの扱い
スペースのエンコードには「%20」と「+」の2種類があります。URLのパス部分では「%20」、クエリパラメータ部分では「+」が使われることが多いですが、実装によって異なります。
文字コードの不一致
古いWebサイトではShift-JISでエンコードされていることがあります。UTF-8でデコードしようとすると文字化けします。日本語のURLエンコードで文字化けが起きた場合は、元の文字コードを確認してみましょう。
ポイント:現在のWebでは、UTF-8が事実上の標準です。新しいサイトやサービスを作る場合は、UTF-8を使っておけば問題ありません。
まとめ
URLエンコードは、日本語やスペースなどの「URLに使えない文字」を安全に送受信するための仕組みです。普段はブラウザが自動的に処理してくれますが、リンクの作成やAPIの利用、データの受け渡しなど、手動でエンコード・デコードが必要になる場面もあります。長いエンコード済みURLの中身を確認したいときや、日本語をパラメータに含めたいときは、URLエンコードツールを活用してください。