我使用以下代码输出到我的错误日志:
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()
,它告诉我字符串有语法错误 - 它可能是转义的双引号吗?
答案 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;