アンパサンド (&) のURLエンコード
アンパサンド文字 (&) を%26にURLエンコードする方法を解説。クエリ値でアンパサンドのエンコードが必要な理由とよくある間違いを理解しましょう。
Character
&
Encoded
%26
詳細な説明
アンパサンド(&)はURLにおいてクエリパラメータ間の区切り文字として機能する予約文字です。アンパサンドが区切り文字としてではなくパラメータ値の一部として現れる場合、曖昧さを避けるために%26にエンコードする必要があります。
エンコードが重要な理由: URL /search?q=Tom & Jerry&lang=en を考えてみましょう。エンコードしなければ、パーサーは3つのパラメータとして解釈します:q=Tom 、 Jerryという空のパラメータ、そしてlang=en。意図した値Tom & Jerryが誤って分割されてしまいます。正しいURLは/search?q=Tom%20%26%20Jerry&lang=enです。
percent-encoding形式: %26はアンパサンド文字を表します(ASCIIコード38、16進数で0x26)。このエンコードにより、URLパーサーはこの文字をパラメータ区切りではなく値の中のリテラル文字として扱います。
JavaScriptでのエンコード:
encodeURIComponent("Tom & Jerry") // "Tom%20%26%20Jerry"
encodeURI("Tom & Jerry") // "Tom%20&%20Jerry" (& をエンコードしない)
重要な違いに注目してください:encodeURI()はアンパサンドをエンコードしません。入力を完全なURIとして扱い、&を有効な区切り文字として保持するためです。encodeURIComponent()のみがアンパサンドをエンコードします。入力を単一のURIコンポーネント(パラメータ値など)として扱うためです。
よくあるシナリオ:
- "AT&T"のような企業名をクエリパラメータに渡す場合
- 別のURL内にURL(独自のクエリ文字列を持つコールバックURL)を埋め込む場合
&を含むXMLやHTMLコンテンツをURLパラメータ内で送信する場合- ベース文字列に
&区切りを含むOAuth署名を構築する場合
避けるべき落とし穴: 文字列連結でURLを構築する際、&を含む値のエンコードを忘れることは最も一般的なバグの一つです。パラメータ値には手動の文字列連結ではなく、常にURLSearchParamsまたはencodeURIComponent()を使用してください。URLSearchParams APIはこれを自動的に処理します:new URLSearchParams({q: "Tom & Jerry"}).toString()はq=Tom+%26+Jerryを生成します。
ユースケース
アンパサンドを含む企業名や商品名をAPIクエリパラメータで渡す場合。例えば、商品カタログで「AT&T」や「Dolce & Gabbana」を検索する場合など。