レッスン 1
URL エンコードとは何か
URL の中で安全に文字を表すために、なぜ percent-encoding が必要なのかを学びます。
URL エンコードは、URL の中で特別な意味を持つ文字や、そのままでは安全に扱えない文字を、% と 16 進数で表す仕組みです。たとえばスペースは %20 として表されます。
URL には scheme、host、path、query、fragment などの部分があります。それぞれで意味を持つ文字が違うため、どこに値を入れるかによって必要なエンコードも変わります。
なぜ必要なのか
?、&、=、#、/ などは URL の構造を表します。これらを単なるデータとして query value に入れたい場合、そのままでは区切り文字として解釈される可能性があります。
https://example.com/search?q=a&b
この URL では、q の値に a&b を入れたいのか、q=a と別パラメータ b を表したいのかが曖昧になります。
文脈が大事
URL エンコードでは「URL 全体を処理する」のか「query value だけを処理する」のかを分けて考えます。JavaScript ではこの違いが encodeURI と encodeURIComponent の使い分けに表れます。
実務では、任意のユーザー入力を URL の一部に入れるとき、対象部分だけをエンコードするのが基本です。