Skip to content

クエリ文字列

[安定版: 2 - 安定版]

安定版: 2 安定度: 2 - 安定版

ソースコード: lib/querystring.js

node:querystring モジュールは、URL クエリ文字列の解析とフォーマットを行うユーティリティを提供します。次のようにアクセスできます。

js
const querystring = require('node:querystring')

querystring<URLSearchParams> よりもパフォーマンスに優れていますが、標準化された API ではありません。パフォーマンスが重要でない場合、またはブラウザコードとの互換性が望ましい場合は、<URLSearchParams> を使用してください。

querystring.decode()

追加されたバージョン: v0.1.99

querystring.decode() 関数は querystring.parse() のエイリアスです。

querystring.encode()

追加されたバージョン: v0.1.99

querystring.encode() 関数は querystring.stringify() のエイリアスです。

querystring.escape(str)

追加されたバージョン: v0.1.25

querystring.escape() メソッドは、URL クエリ文字列の特定の要件に合わせて最適化された方法で、指定された str に対して URL パーセントエンコードを実行します。

querystring.escape() メソッドは querystring.stringify() によって使用され、一般的には直接使用されることは想定されていません。これは主に、アプリケーションコードが querystring.escape を代替関数に割り当てることで、代替パーセントエンコード実装を提供できるようにするためにエクスポートされています。

querystring.parse(str[, sep[, eq[, options]]])

[履歴]

バージョン変更点
v8.0.0複数の空のエントリが正しく解析されるようになりました(例:&=&=)。
v6.0.0返されたオブジェクトは、もはや Object.prototype から継承しません。
v6.0.0, v4.2.4eq パラメータの長さが 1 より大きくなるようになりました。
v0.1.25追加されたバージョン: v0.1.25
  • str <string> 解析する URL クエリ文字列
  • sep <string> クエリ文字列でキーと値のペアを区切るために使用される部分文字列。デフォルト: '&'
  • eq <string> クエリ文字列でキーと値を区切るために使用される部分文字列。デフォルト: '='
  • options <Object>
    • decodeURIComponent <Function> クエリ文字列でパーセントエンコードされた文字をデコードする際に使用する関数。デフォルト: querystring.unescape()
    • maxKeys <number> 解析するキーの最大数を指定します。キーカウントの制限を削除するには 0 を指定します。デフォルト: 1000

querystring.parse() メソッドは、URL クエリ文字列 (str) をキーと値のペアのコレクションに解析します。

たとえば、クエリ文字列 'foo=bar&abc=xyz&abc=123' は次のように解析されます。

json
{
  "foo": "bar",
  "abc": ["xyz", "123"]
}

querystring.parse() メソッドによって返されるオブジェクトは、JavaScript の Object からプロトタイプ的に継承しません。これは、obj.toString()obj.hasOwnProperty() などの一般的な Object メソッドが定義されておらず、動作しませんことを意味します。

デフォルトでは、クエリ文字列内のパーセントエンコードされた文字は UTF-8 エンコーディングを使用すると仮定されます。代替文字エンコーディングを使用する場合は、代替 decodeURIComponent オプションを指定する必要があります。

js
// gbkDecodeURIComponent関数が既に存在すると仮定...

querystring.parse('w=%D6%D0%CE%C4&foo=bar', null, null, { decodeURIComponent: gbkDecodeURIComponent })

querystring.stringify(obj[, sep[, eq[, options]]])

追加日: v0.1.25

  • obj <Object> URL クエリ文字列にシリアライズするオブジェクト
  • sep <string> クエリ文字列において、キーと値のペアを区切るために使用する部分文字列。デフォルト: '&'
  • eq <string> クエリ文字列において、キーと値を区切るために使用する部分文字列。デフォルト: '='
  • options
    • encodeURIComponent <Function> クエリ文字列において、URL で安全でない文字をパーセントエンコーディングに変換する際に使用する関数。デフォルト: querystring.escape()

querystring.stringify()メソッドは、オブジェクトの「自身のプロパティ」を反復処理することで、与えられたobjから URL クエリ文字列を生成します。

objに渡される以下の型の値をシリアライズします: <string> | <number> | <bigint> | <boolean> | <string[]> | <number[]> | <bigint[]> | <boolean[]> 数値は有限でなければなりません。その他の入力値は空文字列に変換されます。

js
querystring.stringify({ foo: 'bar', baz: ['qux', 'quux'], corge: '' })
// 'foo=bar&baz=qux&baz=quux&corge=' を返します

querystring.stringify({ foo: 'bar', baz: 'qux' }, ';', ':')
// 'foo:bar;baz:qux' を返します

デフォルトでは、クエリ文字列内でパーセントエンコーディングが必要な文字は UTF-8 でエンコードされます。代替エンコーディングが必要な場合は、代替のencodeURIComponentオプションを指定する必要があります。

js
// gbkEncodeURIComponent関数が既に存在すると仮定して、

querystring.stringify({ w: '中文', foo: 'bar' }, null, null, { encodeURIComponent: gbkEncodeURIComponent })

querystring.unescape(str)

追加日時: v0.1.25

querystring.unescape()メソッドは、与えられたstrに対して URL パーセントエンコードされた文字のデコードを実行します。

querystring.unescape()メソッドはquerystring.parse()によって使用され、一般的に直接使用されることは想定されていません。これは主に、必要に応じてquerystring.unescapeを代替関数に割り当てることで、アプリケーションコードが置換デコード実装を提供できるようにするためにエクスポートされています。

デフォルトでは、querystring.unescape()メソッドは JavaScript 組み込みのdecodeURIComponent()メソッドを使用してデコードを試みます。それが失敗した場合、不正な URL で例外をスローしない、より安全な同等の方法が使用されます。