从cookie获取数据

时间:2018-04-02 16:17:15

标签: php json string cookies encode

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

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

输出结果为:

  

[02-Apr-2018 16:12:58 UTC] string(321)   " {\"纬度\":\" 42.2470259 \" \"经度\":\" -71.1755274 \& #34; \"高度\":\" NaN的\" \"准确性\":\" 29 \&#34 ; \" altitudeAccuracy \":\" NaN的\" \"标题\":\" NaN的\&#34 ;, \"速度\":\" NaN的\" \" ERROR_CODE \":\" \" \&# 34; ERROR_MESSAGE \":\" \" \" php_time \":1522684274,\" php_date \":\&#34 ; 2018年4月2日   15:51:14 \",\" php_date_format \":\" Ymd H:i:s \",\" user_id \&#34 ;:0}"

     

[02-Apr-2018 16:12:58 UTC] string(321)   " {\"纬度\":\" 42.2470259 \" \"经度\":\" -71.1755274 \& #34; \"高度\":\" NaN的\" \"准确性\":\" 29 \&#34 ; \" altitudeAccuracy \":\" NaN的\" \"标题\":\" NaN的\&#34 ;, \"速度\":\" NaN的\" \" ERROR_CODE \":\" \" \&# 34; ERROR_MESSAGE \":\" \" \" php_time \":1522684274,\" php_date \":\&#34 ; 2018年4月2日   15:51:14 \",\" php_date_format \":\" Ymd H:i:s \",\" user_id \&#34 ;:0}"

     

[02-Apr-2018 16:12:58 UTC] string(321)   " {\"纬度\":\" 42.2470259 \" \"经度\":\" -71.1755274 \& #34; \"高度\":\" NaN的\" \"准确性\":\" 29 \&#34 ; \" altitudeAccuracy \":\" NaN的\" \"标题\":\" NaN的\&#34 ;, \"速度\":\" NaN的\" \" ERROR_CODE \":\" \" \&# 34; ERROR_MESSAGE \":\" \" \" php_time \":1522684274,\" php_date \":\&#34 ; 2018年4月2日   15:51:14 \",\" php_date_format \":\" Ymd H:i:s \",\" user_id \&#34 ;:0}"

     

[02-Apr-2018 16:12:58 UTC] string(321)   " {\"纬度\":\" 42.2470259 \" \"经度\":\" -71.1755274 \& #34; \"高度\":\" NaN的\" \"准确性\":\" 29 \&#34 ; \" altitudeAccuracy \":\" NaN的\" \"标题\":\" NaN的\&#34 ;, \"速度\":\" NaN的\" \" ERROR_CODE \":\" \" \&# 34; ERROR_MESSAGE \":\" \" \" php_time \":1522684274,\" php_date \":\&#34 ; 2018年4月2日   15:51:14 \",\" php_date_format \":\" Ymd H:i:s \",\" user_id \&#34 ;:0}"

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

更新

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

3 个答案:

答案 0 :(得分:1)

看起来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);

答案 1 :(得分:0)

看起来它存储为字符串。转换为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

答案 2 :(得分:0)

Cookie已经采用JSON格式,您需要正确解码。

使用:

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

或单个值:

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

使用默认的json decode对象:

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