LoginSignup
2
5

More than 5 years have passed since last update.

HTTPのGETパラメータ(Query String)の解釈の話

Last updated at Posted at 2016-03-18

Query String って言ったり GETパラメータ って言ったりするけど、例のアレのことね。URL中の ? の後ろのヤツ。

Node.jsのquerystringモジュールに以下のようにデータを食わせてみた。

var qs = require('querystring');
var ab = {
  a: [1, 'ei'],
  b: [2, 'bee'],
};
console.log(qs.stringify(ab));
// a=1&a=ei&b=2&b=bee

\a=1&a=ei&b=2&b=bee/ Σ(゜ω゜)

あれ、おかしくね?と思うわけですよ。「a[0]=1&a[1]=ei&b[0]=2&b[1]=bee」じゃねーの?と。

まぁ、普段PHPも触ってるんでね。
PHPの$_GETの解釈だと「a[0]=1&a[1]=ei&b[0]=2&b[1]=bee」と「{a: [1, 'ei'], b: [2, 'bee']}」で等価なんです。
厳密には違うかもだけどほぼほぼ等価。コーディング時に困らない程度に等価。

で、件の「a=1&a=ei&b=2&b=bee」を$_GETに解釈させるとどうなったか・・・

echo json_encode($_GET);
// {"a":"ei","b":"bee"}

\{"a":"ei","b":"bee"}/ ・・・(=ω=)

知ってた知ってた。後ろの値で上書きね。そうだよね。

さて、どうしようかな・・・(´・ω・`)

【追記】
qs モジュール使ったら大体思った通りになった。

var qs = require('qs');
var ab = {
  a: [1, 'ei'],
  b: [2, 'bee'],
};
console.log(qs.stringify(ab));
// a%5B0%5D=1&a%5B1%5D=ei&b%5B0%5D=2&b%5B1%5D=bee
console.log(decodeURIComponent(qs.stringify(ab)));
// a[0]=1&a[1]=ei&b[0]=2&b[1]=bee
2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5