PSI Labs RSS feed

PHPでGET/POSTパラメータを受け取るにはJSONでまとめてから送るとよさそう

こんにちは、tomitaです。

GET/POSTパラメータを PHP で受け取ると、全て「文字列」になってしまいます。以下は、緯度(lat)と経度(long)を受け取った場合ですが、文字列になっていることがわかります。この値をfloat型として扱うには、キャストや値チェックといった冗長な処理が必要になります。

<?php
// test.php?lat=35.7324438&long=139.7217861
$lat = $_GET["lat"];
$long = $_GET["long"];
var_dump($lat, $long);
// string(10) "35.7324438"
// string(11) "139.7217861"

そこで、以下のようにデータを JSON 文字列としてまとめて送信、サーバ側でデコードしてから処理をすることを考えます。こうすることで変数汚染も少なく型も維持でき、いろいろ楽できそうですね。

<?php
// test.php?data=%7B%22lat%22%3A35.7324438%2C%22long%22%3A139.7217861%7D
$data = json_decode($_GET["data"]);
var_dump($data->lat, $data->long);
// float(35.7324438)
// float(139.7217861)

クライアント側で JSON 文字列を作るには以下のように JSON.stringify を使えば簡単です。JSON.stringify が未サポートの古いブラウザの場合でも Polyfill を使えば問題ないでしょう。

var data = JSON.stringify({
  lat:35.7324438,
  long:139.7217861
});
console.log("./test.php?data=" + encodeURIComponent(data) );
// ./test.php?data=%7B%22lat%22%3A35.7324438%2C%22long%22%3A139.7217861%7D

JSONを使って型に悩まされず楽な生活を送りたいものですね…

それでは~