URLにおける特殊文字の処理

URLのパス、クエリ文字列、フラグメントでスペース、Unicode、絵文字、予約文字を正しく処理してURLを壊さない方法を学びます。

Advanced

詳細な説明

URLの特殊文字

URLは限られたASCII文字セットを使用するように定義されています。このセット外の文字(スペース、国際文字、絵文字を含む)はエンコードする必要があります。

URLを壊す文字

文字 問題 解決策
スペース URLを分割 %20(パス)または+(クエリ)
# フラグメント開始 %23
? クエリ文字列開始 %3F
& クエリパラメータ区切り %26
= キーバリュー区切り %3D
% エンコーディングプレフィックス %25

Unicode文字

非ASCII文字はUTF-8バイトとしてエンコードされ、各バイトがパーセントエンコードされます:

"日本" → UTF-8バイト: E6 97 A5 E6 9C AC → %E6%97%A5%E6%9C%AC

安全なURL構築の実践

// 間違い:文字列結合
const url = "https://api.com/search?q=" + userInput;

// 正しい:URLSearchParams
const url = new URL("https://api.com/search");
url.searchParams.set("q", userInput);

// 正しい:パスセグメントにencodeURIComponent
const url = `https://api.com/users/${encodeURIComponent(username)}/profile`;

よくある間違い

  1. ユーザー入力をエンコードしない — インジェクションリスクと壊れたURL
  2. パラメータにencodeURI()を使用&=#をエンコードしない
  3. URL全体をエンコード — 構造を壊す(://%3A%2F%2Fになる)
  4. 二重エンコード — すでにエンコードされた値をエンコード

ユースケース

特殊文字の適切な処理は、検索エンジン、ユーザー生成コンテンツプラットフォーム、国際化アプリケーション、動的データからURLを構築するあらゆるシステムにとって重要です。不正なエンコーディングは本番システムでの壊れたリンク、XSS脆弱性、失敗したAPIリクエストの頻繁な原因です。

試してみる — URL Parser & Builder

フルツールを開く