アンパサンド (&) の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」を検索する場合など。

Try It — URL Encoder

フルツールを開く