URLクエリ文字列の構築と解析

キーバリューペアからURLクエリ文字列を構築する方法、特殊文字の処理、配列パラメータの操作、URLSearchParams APIを使用した堅牢なクエリ文字列管理を学びます。

Query Parameters

詳細な説明

URLクエリ文字列

クエリ文字列はURLのうちキーバリューデータを運ぶ部分で、?で始まり&で複数のパラメータを区切ります。

基本構文

https://search.example.com/results?q=javascript+tutorial&page=2&lang=en
                                    \___________________/ \_____/ \_____/
                                           |                |       |
                                      パラメータ1      パラメータ2  パラメータ3

URLSearchParams API

JavaScriptでクエリ文字列を扱うモダンな方法:

// 構築
const params = new URLSearchParams();
params.append("q", "hello world");
params.append("page", "1");
params.append("tags", "js");
params.append("tags", "web");
console.log(params.toString());
// "q=hello+world&page=1&tags=js&tags=web"

// 解析
const search = new URLSearchParams("?q=test&page=2");
console.log(search.get("q"));     // "test"
console.log(search.get("page"));  // "2"
console.log(search.has("q"));     // true

配列パラメータ

配列を渡す方法にはさまざまな慣例があります:

// 繰り返しキー(URLSearchParamsのデフォルト)
?tags=js&tags=css&tags=html

// ブラケット記法(PHP、Rails)
?tags[]=js&tags[]=css&tags[]=html

// カンマ区切り(一部のREST API)
?tags=js,css,html

エンコーディングルール

クエリ文字列の値は特殊文字に対してパーセントエンコードする必要があります:

文字 エンコード 備考
スペース + または %20 クエリ文字列では+が標準
& %26 セパレータとして扱われるため
= %3D キーバリューデリミタとして扱われるため
# %23 ハッシュフラグメントの開始として扱われるため
% %25 エスケープ文字自体のエスケープ

パラメータの順序

クエリパラメータの順序は通常サーバーにとって重要ではありませんが、一部のキャッシュシステムや署名アルゴリズム(AWS Signature V4など)ではカノニカルなパラメータ順序が必要です。パラメータをアルファベット順にソートすることは一般的な正規化手法です。

ユースケース

クエリ文字列の構築はフロントエンド開発の基本です。検索フォームはクエリパラメータとしてデータを送信し、ページネーションはpage/offsetパラメータに依存し、フィルターUIは複数のフィルター値をURLにシリアライズする必要があります。クエリ文字列構築の理解は、シングルページアプリケーションで共有可能でブックマーク可能なURLを構築するために不可欠です。

試してみる — URL Parser & Builder

フルツールを開く