About URL Encoding
URLエンコードはパーセントエンコーディングとも呼ばれ、Uniform Resource Identifier(URI)内の情報をエンコードする仕組みです。URLで許可されていない文字をインターネット上で送信可能な形式に変換します。このエンコードは、安全でないASCII文字を "%" と2桁の16進数で置き換えます。
URLエンコードの一般的な用途
- URLのクエリ文字列のフォーマット
- HTTPリクエストでのフォームデータ送信(application/x-www-form-urlencoded)
- 特殊文字やスペースを含む有効なURLの作成
- URL内の非ASCII文字のエンコード
- APIやウェブサービスで複雑なパラメータを渡す
URLエンコードの仕組み
URLエンコードは以下の原則に従います:
- 英数字(A-Z、a-z、0-9)は変更されません
- スペース、?, &, =, %, + などの特殊文字はパーセントエンコードされた対応文字に変換されます
- UTF-8でエンコードされた文字の各バイトは個別にパーセントエンコードされます
- スペース文字は "%20" または "+"(クエリパラメータ内)としてエンコードできます
- /、:、?、#、[ などの予約文字はURL内で特別な意味を持ち、文脈に応じて異なる扱いを受けることがあります
encodeURI と encodeURIComponent の違い
JavaScriptはURLエンコードのために2つの関数を提供しています:
- encodeURI: URI全体をエンコードし、URI構文の一部である文字(/:?#[]@!$&'()*+,;=)は保持します
- encodeURIComponent: URIコンポーネント(クエリパラメータの値など)をエンコードし、URI内で特別な意味を持つ文字も含めてより多くの文字をエンコードします
ユーザー入力やクエリパラメータをエンコードするほとんどの場合、 encodeURIComponent()
は、潜在的に問題となるすべての文字を適切にエンコードするため、安全な選択肢です。
国際文字のためのURLエンコード
最新のブラウザは非ASCII文字をUTF-8でエンコードし、その後各バイトをパーセントエンコードします。これにより、国際文字、絵文字、その他のUnicode記号をURLに正しく含めることができます。例えば、日本語の文字「日」は最初に3バイト(E6 97 A5)でUTF-8エンコードされ、その後 "%E6%97%A5" とパーセントエンコードされます。
Examples
プレーンテキスト | URLエンコード済み |
---|---|
Hello World | Hello%20World |
https://example.com/?q=search term | https%3A%2F%2Fexample.com%2F%3Fq%3Dsearch%20term |
50% off sale! | 50%25%20off%20sale%21 |
Smith & Jones LLC | Smith%20%26%20Jones%20LLC |