URL 予約文字の完全ガイド
URL エンコーディングガイド
URL 仕様(RFC 3986)は文字を大きく 予約文字(reserved) と 非予約文字(unreserved) に分けます。この区別を知ると、いつエンコードすべきで、いつしなくてよいのかが明確になります。
非予約文字(そのまま使用可能)
アルファベットの大文字・小文字、数字、そして - _ . ~ の 4 つの記号は、どの位置でもエンコードなしでそのまま使えます。これらの文字はエンコードしても意味が変わらないので、通常はエンコードしません。
予約文字(構造的な意味を持つ)
予約文字は URL の構造を区切る役割を持ちます。データの一部として使うには、必ずエンコードしなければなりません。
:/?#[]@— アドレスの大きな区画(scheme・path・query・fragment など)を区切る!$&'()*+,;=— 下位区画、特にクエリ文字列のキーと値の区切り
encodeURI と encodeURIComponent の境界
encodeURI は上記の予約文字を 保持 します。すでに完成した URL 全体をエンコードするとき、構造を壊さないためです。一方 encodeURIComponent は予約文字まで すべて変換 します。パラメータ値ひとつのように URL の断片を入れるときに安全です。
値をひとつ入れるときは encodeURIComponent、アドレス全体を扱うときは encodeURI — この原則だけ覚えておけば、ほとんどのミスを避けられます。