从 cookie 获取数据

Getting data from a cookie

我正在使用以下代码输出到我的错误日志:

ob_start();
var_dump($_COOKIE['agl-values']);
error_log(ob_get_clean());

输出为:

[02-Apr-2018 16:12:58 UTC] string(321) "{\"latitude\":\"42.2470259\",\"longitude\":\"-71.1755274\",\"altitude\":\"NaN\",\"accuracy\":\"29\",\"altitudeAccuracy\":\"NaN\",\"heading\":\"NaN\",\"speed\":\"NaN\",\"error_code\":\"\",\"error_message\":\"\",\"php_time\":1522684274,\"php_date\":\"2018-04-02 15:51:14\",\"php_date_format\":\"Y-m-d H:i:s\",\"user_id\":0}"

[02-Apr-2018 16:12:58 UTC] string(321) "{\"latitude\":\"42.2470259\",\"longitude\":\"-71.1755274\",\"altitude\":\"NaN\",\"accuracy\":\"29\",\"altitudeAccuracy\":\"NaN\",\"heading\":\"NaN\",\"speed\":\"NaN\",\"error_code\":\"\",\"error_message\":\"\",\"php_time\":1522684274,\"php_date\":\"2018-04-02 15:51:14\",\"php_date_format\":\"Y-m-d H:i:s\",\"user_id\":0}"

[02-Apr-2018 16:12:58 UTC] string(321) "{\"latitude\":\"42.2470259\",\"longitude\":\"-71.1755274\",\"altitude\":\"NaN\",\"accuracy\":\"29\",\"altitudeAccuracy\":\"NaN\",\"heading\":\"NaN\",\"speed\":\"NaN\",\"error_code\":\"\",\"error_message\":\"\",\"php_time\":1522684274,\"php_date\":\"2018-04-02 15:51:14\",\"php_date_format\":\"Y-m-d H:i:s\",\"user_id\":0}"

[02-Apr-2018 16:12:58 UTC] string(321) "{\"latitude\":\"42.2470259\",\"longitude\":\"-71.1755274\",\"altitude\":\"NaN\",\"accuracy\":\"29\",\"altitudeAccuracy\":\"NaN\",\"heading\":\"NaN\",\"speed\":\"NaN\",\"error_code\":\"\",\"error_message\":\"\",\"php_time\":1522684274,\"php_date\":\"2018-04-02 15:51:14\",\"php_date_format\":\"Y-m-d H:i:s\",\"user_id\":0}"

我只需要访问纬度和经度变量。如何隔离其中一个 cookie,然后如何将其变成 JSON?

更新

我检查了 json_last_error(),它告诉我字符串有语法错误 - 可能是转义的双引号?

看起来它存储为一个字符串。转换为 JSON 对象然后引用:

$value = json_decode($_COOKIE['agl-values']);
echo $value->longitude . ' ' . $value->latitude;

更新

这是您的字符串的直接示例:

php > $var = json_decode("{\"latitude\":\"42.2470259\",\"longitude\":\"-71.1755274\",\"altitude\":\"NaN\",\"accuracy\":\"29\",\"altitudeAccuracy\":\"NaN\",\"heading\":\"NaN\",\"speed\":\"NaN\",\"error_code\":\"\",\"error_message\":\"\",\"php_time\":1522684274,\"php_date\":\"2018-04-02 15:51:14\",\"php_date_format\":\"Y-m-d H:i:s\",\"user_id\":0}");
php > echo $var->longitude;
-71.1755274

cookie已经是JSON格式,您需要正确解码。

使用:

print_r(json_decode($_COOKIE['agl-values'], true));

或者对于单个值:

echo json_decode($_COOKIE['agl-values'], true)['latitude'];

要使用默认 json 解码对象:

echo json_decode($_COOKIE['agl-values'])->latitude;

看起来 json (\") 中有一些转义引号,这意味着 json_decode 会因语法错误而失败。尝试使用 str_replace 将它们更改为常规引号 ("):

json_decode(str_replace('\"', '"', $_COOKIE['agl-values']))

然后,要获取纬度和经度,请执行以下操作:

$aglValues = json_decode(str_replace('\"', '"', $_COOKIE['agl-values']));

var_dump($aglValues->latitude);
var_dump($aglValues->longitude);