クエリ文字列を解析

クエリ文字列を——あるいはアドレス全体を貼り付ければそこから取り出して——パラメーターごとに 1 行、値をデコードした形で返します。重複したキーは最後のものに上書きされず、それぞれ独立した行として残ります。探している情報がちょうどそこにあることが多いからです。

既定では切ってあります。読めるようにすることがこのページの目的だからです。

結果

入力すると、ここに答えが出ます。

  • 処理される場所

    ファイルがないので、何もアップロードされません。計算はこのページの中で行われます。

  • 順番待ちもアカウントもなし

    お使いの機械の速さで答え、あなたが誰かを尋ねることはありません。

  • 何度でも

    回数は数えず、上限もありません。もう一度答えることに費用はかからないからです。

仕組み

  1. クエリ文字列か URL 全体を貼り付けてください。
  2. パラメーターを 1 行ずつ読みます。生の形が必要なら、デコードを切ります。
  3. 何も送信されていません。

重複したキーは残ります

クエリ文字列は同じ名前を何度も持てます。`tag=a&tag=b` は複数選択のよくある形です。これを辞書に読み込む人は、最後の値以外をすべて失います。どんな警告も指摘しないデータの喪失です。

ここでは出現ごとに専用の行があります。聞こえるより重要です。フレームワークの合意がないからです。PHP は `tag[]=a&tag[]=b` を求め、Rails は角かっこを別に解釈し、Express には複数のモードがあります。複数選択が中途半端に届くなら、原因はほぼここにあります。

断片だけで足ります

入力はアドレス全体である必要がありません。先頭の疑問符があってもなくても、クエリ文字列だけで完全な URL と同じように動き、URL を渡せばそこからクエリを取り出します。分析のエクスポートやログからコピーするものが行全体であることはめったにないので、これが便利です。

疑問符か等号が現れるかどうかで判断します。どちらも含まない入力はクエリ文字列ではなく普通のテキストで、そう扱われません。当たり前に聞こえて、これがないと URL 全体がパラメーター名ひとつとして読まれる規則です。

プラス記号が空白になる理由

クエリ文字列の中では、`+` は伝統的に空白を意味します。HTML のフォームが送信する形式である `application/x-www-form-urlencoded` から来ていて、現在の URL の仕様より古く、フォームがいまも使うので生き残っています。

帰結は罠です。値の中の本物のプラスは `%2B` と書かなければ消えます。特に効くのは国際形式の電話番号と、サブアドレス付きのメールアドレスです。`[email protected]` は読み込みで `a [email protected]` になり、配送は誰も見ない地点で失敗します。

値の中の URL

パラメーターとしてのリダイレクト先は、入れ子になったエンコードの最もよくある例です。`next` の値それ自体が URL で、そのスラッシュと疑問符は、外側のアドレスを分解してしまわないようにエスケープされていなければなりません。デコードすれば、また読めるアドレスに戻ります。

誰かが 2 回エンコードしたかどうかもここで見えます。デコードした値にまだ `%2F` が残っているなら、入力はエンコーダーを 2 回通っていました。そしてこの種のリダイレクトを受け取る側は、行き先を許可ホストの一覧と突き合わせるべきです。オープンリダイレクトはちょうどこの地点で生まれます。

生の表示が何のためにあるか

既定では値をデコードします。それがこのページの目的です。生の形への切り替えは飾りではありません。クエリ文字列に対して署名を計算するなら、効くのはエンコードされた正確な書き方で、`%20` と `+` の違いが受理と拒否を分けます。

二重エンコードを探すのにも同じくらい役立ちます。生の値の中の `%2520` は、鎖のどこかでエンコード済みの値がもう一度エンコードされたことの動かぬ証拠です。デコード後の結果には、疑わしい `%20` しか残りません。

どこにでも現れる UTM パラメーター

`utm_source`、`utm_medium`、`utm_campaign`、`utm_term`、`utm_content` は、Google Analytics の元になった Urchin という道具から来ています。名前もそこからです。サーバーでは何もしません。ブラウザーの計測スクリプトが読むテキストです。

何もしないので、リンクを転送するときに削っても影響はありません。送ってくれた人の統計と自分のものを混ぜたくなければ、そうする理由があります。そしてアドレスに入っているので、履歴と共有リンクとブックマークに残ります。メールマガジンのリンクがばかばかしく長い理由です。

クエリ文字列に居場所のないもの

アドレスはサーバーのログ、ブラウザーの履歴、次のクリックのリファラーヘッダー、そしてしばしば途中のプロキシのログに行き着きます。パラメーターに入れたパスワード、セッションキー、トークンは、したがって誰も想定しなかった少なくとも 4 か所に保存されます。

それを避けようのない確認リンクや再設定リンクについての規則はこうです。有効期間を短く、1 回きりに、開いた直後にアドレスから取り除く。ここで秘密らしき値が見えたなら、それが発見です。デコードできたこと自体ではありません。

空の値と、等号のないキー

値のない `?debug`、空の値を持つ `?a=`、そしてパラメーターの不在は 3 つの別のものです。フレームワークの扱いも別々で、あるときは空文字列、あるときは `true`、あるときは存在しないものになります。ここでは文字列にあるとおりに表示します。

見た目より重要です。名前だけで渡す切り替えは、言語によっては空の値として届き、そこで偽と評価されます。パラメーターは付いていて、機能は有効にならず、どのログにも目立つものは残りません。

個人情報保護法から見たときの位置

ログや分析のエクスポートのクエリ文字列は、頻繁に個人データを運びます。検索語、パラメーターに入ったメールアドレス、アカウントに結びつけられる識別子。ここではページの中で分解されるので、そのいずれも端末から出ません。

この種のエクスポートをオンラインの道具で見られるための条件がそれです。サーバーで分解するサービスはその 1 行を受け取っており、ログに持っています。多くの社内規程が存在する理由は、まさにその種のデータの提供です。

クエリ文字列を解析:よくある質問

URL 全体を貼り付ける必要がありますか。

いいえ。先頭の疑問符があってもなくても、クエリ文字列だけで足ります。アドレス全体を貼り付けた場合は、そこからクエリを取り出します。

プラス記号が空白になってしまったのはなぜですか。

クエリ文字列では + が空白を意味するからです。フォームの符号化を受け継いだものです。本物のプラスは %2B と書かなければ消えます。国際形式の電話番号とサブアドレス付きのメールアドレスに特に効きます。

重複したキーはどうなりますか。

出現ごとに専用の行が出ます。辞書に読み込む場合との違いがそこで、あちらでは最後の値以外が失われます。複数選択で情報があるのはまさにそこです。

エンコードされたままの表示は何に使いますか。

署名です。そこではエンコードされた正確な書き方が効きます。それと二重エンコードを探すため。生の値の中の %2520 は、どこかでエンコード済みの値が再びエンコードされたことの証拠です。

クエリ文字列は端末から出ますか。

いいえ。分解もデコードもこのページの中で行われます。ログや分析のエクスポートの行では効きます。検索語、識別子、ときにはトークンを運んでいるからです。

他のツール