クエリ文字列パーサー
name=Ada&city=New%20York&q=hello+worldは、3つの名前と値のペアに分かれ、New%20YorkはNew Yorkに戻ります。クエリ文字列を名前と値に分けたり、ペアから正しくエンコードした文字列を作ったりできます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
処理はブラウザ内で完結します。ファイルは送信されません。無料でご利用いただけます。
URL のクエリ文字列は、アドレスの疑問符の後ろにフィルタ、キャンペーンタグ、ページネーション、フォーム項目を載せます。手作業での読み取りは誤りやすく、空白がプラス記号や percent-twenty として現れ、アンパサンドが項目を分け、等号が名前と値を分け、壊れたパーセントエスケープはログ行全体を汚染することがあります。このクエリ文字列パーサーは、単一の契約で双方向に変換します。parse モードは先頭の疑問符の有無を問わず生のクエリを受け取り、各キーと値をデコードし、順序付きペア一覧と一意キー用の単純なオブジェクトマップを返します。serialize モードは同じペアまたはプレーンなオブジェクトマップを受け取り、パスの後ろに付ける準備のできた正しくパーセントエンコードされたクエリ文字列を出力します。
クエリ文字列がキーと値のペアを表す仕組み
典型的なクエリ断片は name equals Ada ampersand city equals New percent-twenty York のような形です。アンパサンドが項目区切り、各項目の最初の等号がパラメータ名と値を分けます。
値(場合により名前)はパーセントエンコードされ、空白、アンパサンド、非 ASCII 文字、予約文字がブラウザ、プロキシ、分析ツールを通過しても壊れません。多くのサーバは HTML フォームの application/x-www-form-urlencoded 規則に従い、裸のプラスを空白としても扱います。
本機能は解析時に既定でそうし、リテラルのプラスが必要なときは無効にできます。末尾や二重のアンパサンドによる空項目はスキップし、空の幽霊キーを作りません。等号のないパラメータは空文字列値のキーとして扱い、一般的なサーバライブラリと揃えます。
同じキーが複数回現れると、順序付きペア一覧にすべて残し、複数選択フィルタや繰り返しタグを失いません。付随するオブジェクトマップは last-wins で、単純なクライアントにも平坦な辞書を渡せます。エンコードは各キーと値に encodeURIComponent を使い、予約区切りが組み立て文字列へ漏れないようにします。
クエリ文字列パーサーが役立つ場面
現在の location search からフィルタチップを再構築するフロントエンドは、複数値ファセットが encode と decode の往復を生き延びるよう順序付きペアを必要とします。サポートチームはチケットから半端にエンコードされたリンクを貼り、切り詰められたエスケープで黙って文字を捏造せず、はっきり失敗するデコーダを求めます。
Web 基礎を教える教材の著者は、トピックを汎用パーセントエンコーダや UTM ビルダーに埋めるのではなく、クエリパラメータの読み書き専用ランディングを望みます。検索意図が違うからです。クエリ文字列パーサーを探す人は文字エスケープだけでなく構造を求めます。
検証失敗は残高を消費しません。
活用例
安全な送信クエリ文字列の構築
フィルタ、タグ、フォーム項目を正しくパーセントエンコードしたクエリ文字列へシリアライズし、予約文字が余分なパラメータを作らないようにします。
よくある質問
URL クエリ文字列をキーと値のペアにどう解析しますか?
mode を parse にするか省略し、先頭 ?の有無を問わずクエリ断片を text で送ってください。
ペアをクエリ文字列へどうシリアライズしますか?
応答の encoded(と query)は各名前と値をパーセントエンコードし & で結合します。
プラス記号は空白として扱われますか?
解析時は既定ではい(application/x-www-form-urlencoded)。
同じ名前が2回出てくるとどうなりますか?
すべての出現を順番どおりに残すので、複数選択のフィルターや繰り返しのタグも失われません。名前と値だけの簡単な一覧では、各名前の最後の値だけを残します。
%の並びが壊れているとどうなりますか?
問題の位置を示すメッセージを出して止まります。末尾に単独の%がある場合や、%のあとに十六進数でない文字が続く場合は、中途半端に戻さずに受け付けません。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/enc/query-string \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"mode":"parse","op":"parse"}'const res = await fetch("https://api.kit.forhosting.com/enc/query-string", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"mode": "parse",
"op": "parse"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/query-string",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"mode": "parse",
"op": "parse"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/query-string", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"mode":"parse","op":"parse"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"mode":"parse","op":"parse"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/query-string", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"mode": "parse",
"op": "parse"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.query_string",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
不正なパーセント列は半端なゴミではなく invalid_input で失敗します。
クエリ文字列がキーと値のペアを表す仕組み
デコードはホスト側の前に各パーセント列を検査し、末尾だけのパーセントやパーセント後の非十六進数字は位置を示すメッセージ付きの invalid_input になります。処理はネットワークも乱数シードも壁時計時刻もなく、純粋な文字列操作だけなので、同一入力は常に同一の JSON になります。成功した API の料金は公開されている基本の $0.002 / 項目で、検証失敗はプリペイド残高を消費しません。
入力契約、応答の形、エラーの振る舞い
先頭の疑問符は任意で除去され、クエリ後のハッシュ断片は無視されるため、ブラウザから検索全体を貼っても動作します。検証失敗はプリペイド残高を消費しません。定番の確認は name equals Ada ampersand city equals New percent-twenty York の解析、空白とアンパサンドを含むペアのシリアライズ、裸のパーセントで終わる値の拒否です。素早い確認には無料ブラウザフォームを配線し、大量パラメータ準備や回帰用フィクスチャが必要なときは同じ契約をスクリプトから呼び出してください。mode を parse または serialize にした JSON 本体を送ってください。parse では text(別名 query、query_string、qs)にクエリ断片を入れます。任意の plus_as_space は form-urlencoded のプラスを空白に変える既定 true です。成功時 parse は mode、plus_as_space、元の text、正規化した query ビュー、順序付きの key と value 文字列配列 pairs、一意キーの last-wins マップ object、ペア数 count、ラウンドトリップ比較用にそれらのペアから再シリアライズした encoded を返します。serialize では pairs を key と value フィールドを持つオブジェクト配列、またはプレーンなオブジェクトマップとして渡します。成功時 serialize は mode、plus_as_space、正規化した pairs、object、count、encoded、query(先頭疑問符なしの同じエンコード文字列)を返します。parse で text 欠落、serialize で pairs 欠落、未対応の mode、マップ内の入れ子オブジェクト、過長文字列、不正なパーセント列はすべて invalid_input と明確な英語メッセージで失敗します。成功した API 料金は公開基本の $0.002 / 項目です。
クエリ文字列パーサーが役立つ場面
受信リクエストを記録するバックエンドは、プラス記号や Unicode を誤る使い捨てスプリッタを書かずに、URL の検索部分をメトリクスとサポート用の構造化フィールドへ変える確実な手段が必要です。実装は tier A の純粋 parse のため、成功した呼び出しはモデルトークンも外向きネットワークもなく公開基本価格 $0.002 です。文書化された長さ制限内にリクエストを収め、テストで順序付きペアを固定すれば、ダッシュボード、LMS プラグイン、エッジワーカー向けの再現可能なパラメータマップを、自前の完全な URL ツールキットなしで得られます。
連携の活用例
受信 URL パラメータの検査
リクエストのクエリ文字列を順序付きキー・値ペアに解析し、プラス記号やパーセントエスケープを誤らずにログ、サポート、分析へ渡せます。
往復テストとフィクスチャ
CI 向けに parse と serialize のゴールデンベクトルを生成し、複数値キーと Unicode 値がランタイム間で安定するよう保ちます。
技術的な質問
パーセント列が不正な場合はどうなりますか?
parse は invalid_input で失敗し、パラメータと不正なエスケープ(不完全な % や非十六進など)を示します。検証失敗は課金されません。
クエリ文字列パーサーの料金は?
ブラウザツールは無料です。API は成功した呼び出しごとに KIT のプリペイド残高から $0.002 を使い、無効な入力は課金されません。