URL エンコードとは?いつパーセントエンコードすべきか
URL で文字をエンコードする理由、encodeURI と encodeURIComponent の違い、二重エンコードの避け方を整理します。
URL エンコードは、URL にそのまま入れると解釈が壊れる文字を %XX 形式に置き換える仕組みです。redirect URL、query parameter、API リクエストなどで正しく扱うには、何をどの粒度でエンコードすべきかを理解しておく必要があります。
なぜ URL エンコードが必要なのか
URL では使える文字が限られており、空白や ?、#、日本語などをそのまま含めると、ブラウザやサーバー側で意図しない解釈が起こります。
パーセントエンコードは unsafe なバイトを %XX 形式に変換する仕組みです。たとえば空白は %20、? は %3F、日本語の 日 は UTF-8 のバイト列に応じて %E6%97%A5 のように表現されます。
このセクションで使うツール
encodeURI と encodeURIComponent の違い
encodeURI は URL 全体を対象にし、/ や ?、& など構造を表す文字は残したまま unsafe な部分だけをエスケープします。すでに完成している URL を安全にする時はこちらです。
一方 encodeURIComponent はパラメータ値のような部分文字列向けです。query parameter や redirect target など、URL の一部だけを埋め込む時は encodeURIComponent を使うのが基本です。
このセクションで使うツール
二重エンコードはなぜ起きるのか
すでにエンコード済みの文字列をもう一度エンコードすると、%20 が %2520 になるように % 自体まで再変換されます。これが二重エンコードです。
よくある原因は、すでに % を含んだ完全な URL に対して encodeURIComponent をかけてしまうことです。URL 全体ではなく、必要なパラメータ値だけを個別にエンコードする癖を付けると防ぎやすくなります。
このセクションで使うツール