Webアプリケーションの開発やAPI連携、URLパラメータの処理において避けて通れないのがURLエンコード(URL encoding)です。
特殊文字や日本語を安全にURLに含めるための基本技術であり、正しく理解しておくことはシステムの安定性やセキュリティの観点からも非常に重要です。
本記事では、URLエンコードの仕組み、エンコードされる文字の具体例、文字コードとの関係、実務での使い方と注意点までを詳しく解説します。
URLエンコードとは何か?
URLエンコードの定義
URLエンコードとは、URLに使用できない文字(制御文字や一部の記号、日本語など)を、「%」記号と16進数のコードによって表現する方法です。
例えば、半角スペースは%20
、記号「#」は%23
のように変換されます。
URLの構造と関係性
URL(Uniform Resource Locator)は、インターネット上のリソースの場所を表す表記形式で、HTTPでは以下のように構成されます:
このURLの中で、パス名やクエリ文字列などに一部の記号や全角文字を含む場合、URLエンコードによる変換が必須です。
なぜURLエンコードが必要なのか?
使用できない文字の存在
RFC 3986により、URLで使用できる文字は厳格に定められており、以下のような文字はエンコードが必要です:
-
制御文字(NULLやBELなど)
-
予約文字(
" # % < > { } [ ]
など) -
空白(スペース)
例:変換が必要な文字とその表現
多バイト文字とエンコードの違い
エンコードは文字コード依存
日本語などの多バイト文字は、使用する文字コード(UTF-8 / Shift_JIS など)によってURLエンコードの結果が異なります。
-
「あ」
-
UTF-8:
E3 81 82
→%E3%81%82
-
Shift_JIS:
82 A0
→%82%A0
-
注意点:バイト単位での変換
URLエンコードはバイト単位で処理されるため、Shift_JISなどの2バイト文字の一部がASCIIコードと一致する場合、そのまま表示される可能性があります。
「application/x-www-form-urlencoded」とは?
POSTメソッドで使用される特殊なエンコード形式
フォーム送信やHTTPリクエストのPOSTメソッドでは、application/x-www-form-urlencoded
という方式でデータが送信されます。
これも一種のURLエンコードと見なされます。
主な特徴
-
英数字はそのまま送信
-
特殊文字は
%
+ 16進数でエンコード -
スペースは
%20
ではなく+
に変換 -
一部記号(
* - . _
)はそのまま使用可能