Learn
URLエンコードとは?URLデコードとは?
URLエンコードとURLデコードの意味、必要になる理由、%E3%81%82 や %20 の読み方を整理します。
1. ざっくり言うと何か
URLエンコードは、URLの中でそのまま扱えない文字や、区切り文字と誤解されやすい扱いにくい文字を「%」と16進数の組み合わせへ変換することです。たとえば「あ」は UTF-8 のバイト列をもとに %E3%81%82 のように表されます。
URLデコードはその逆で、%E3%81%82 や %20 のような表記を、人が読める文字へ戻すことです。アクセスログ、共有されたURL、クエリパラメータの中身を読むときによく使います。
2. なぜ必要になったのか
URLには、区切り文字として特別な意味を持つ文字があります。たとえば ? はクエリの始まり、& はパラメータの区切り、= は名前と値の区切りとして使われます。
もし検索キーワードやフォーム入力の中に日本語、空白、&、= などがそのまま入ると、URLの構造なのか値なのか区別しにくくなります。そこで「これはただの文字です」と安全に渡すためにURLエンコードを使います。
3. どういう仕組みで動くのか
基本は、文字をUTF-8などのバイト列にし、URL内でそのまま置けないバイトを %XX の形へ置き換える仕組みです。XX は16進数です。
たとえば日本語の「あ」は、内部的には複数のバイトで表されます。そのバイト列をURLで安全に扱える形へ置き換えると、%E3%81%82 のような表記になります。
どの文字を変換するかは、URL全体を扱うのか、検索キーワードやパラメータの値だけを扱うのかで変わります。まずは「URLにそのまま置くと紛らわしい文字を、安全な表記へ置き換える」と捉えると理解しやすいです。
- 「かる ツール」→ %E3%81%8B%E3%82%8B%20%E3%83%84%E3%83%BC%E3%83%AB
- 空白はこのサイトのツールでは %20 として扱います。
- application/x-www-form-urlencoded では空白を + と表す流儀もあります。
4. よくある誤解
URLエンコードは暗号化ではありません。%E3%81%82 のように読みにくく見えても、誰でもデコードすれば元の文字を読めます。秘密情報を守る目的では使えません。
また、URL全体を常にエンコードすればよいわけでもありません。多くの場合、変換するのはURL全体ではなく、検索語、名前、リダイレクト先などの「値」の部分です。
- URLエンコードは「安全にURLへ入れるための表記変換」であり、セキュリティ対策そのものではありません。
- Base64とは目的が違います。Base64はバイナリやテキストを別の文字集合で表すエンコードで、URLの区切り文字処理とは別問題です。
- 同じ空白でも、文脈によって %20 と + のどちらで表されるかが変わります。
5. 実際に使われる場面
検索フォームのキーワードをURLに入れるとき、キャンペーンURLのパラメータを作るとき、APIへクエリ文字列を渡すときなどに使われます。
逆にURLデコードは、ログに残ったURL、アクセス解析のパラメータ、共有された長いURLの中身を確認するときに便利です。