アットマーク (@) のURLエンコード

アットマーク (@) を%40にURLエンコードする方法を解説。URLにおけるuserinfoでの役割、メールアドレスの扱い、エンコードが必要な場面を学びましょう。

Character

@

Encoded

%40

詳細な説明

アットマーク(@)はURLにおいて特別な意味を持ちます。userinfo コンポーネント(ユーザー名とオプションのパスワード)をホストから分離する役割があります。例えば、ftp://user:pass@host.comでは、@が認証情報の終わりとホスト名の始まりをパーサーに示します。@がURLの他の部分でデータとして現れる場合は、%40にエンコードする必要があります。

percent-encoding形式: %40はアットマークを表します(ASCIIコード64、16進数で0x40)。

@が特別な意味を持つ場所: RFC 3986によると、@記号はURLのauthorityコンポーネントのために予約されています:scheme://userinfo@host:port/path。この特定の位置以外では、URL内のエンコードされていない@がホスト部分の始まりについてパーサーを混乱させる可能性があります。

JavaScriptでの動作:

encodeURIComponent("user@example.com") // "user%40example.com"
encodeURI("user@example.com")          // "user@example.com" (@ を保持)

// メールアドレスをクエリパラメータとして渡す
const email = "user@example.com";
const url = `/api/invite?email=${encodeURIComponent(email)}`;
// "/api/invite?email=user%40example.com"

エンコードが必要なよくあるシナリオ:

  • クエリパラメータ内のメールアドレス(最も頻繁なケース)
  • URLパラメータ内のTwitter/SNSハンドル(例:@username
  • レジストリURLにおける@angular/coreのようなスコープ付きnpmパッケージ名
  • パラメータ値として埋め込まれたmailtoリンク

パス内のメールアドレス: 一部のAPIでは、/users/user@example.com/settingsのように、パス内のリソース識別子としてメールアドレスを使用します。多くの実装で動作しますが、技術的には曖昧です。より安全なアプローチは/users/user%40example.com/settingsのようにエンコードすることです。あるいは、一部のAPIではメールをクエリパラメータとして受け付けます。

落とし穴: メールベースのルックアップを行うAPIのURL構築時に@のエンコードを忘れると、URLパーサーが@の前をすべて認証情報として解釈する可能性があります。例えば、https://api.example.com/lookup/admin@company.comは、ユーザー名admincompany.comへのリクエストとして解析される可能性があります。パスセグメントやパラメータ値に@が現れる場合は常にエンコードしてください。

ユースケース

APIクエリパラメータやパスセグメントにメールアドレスを含める場合。例えば、ユーザー招待エンドポイントやアカウント検索URLなど。

Try It — URL Encoder

フルツールを開く