我正在编码要保存在$_COOKIE
中的数组。
由于完整的多维数组(此处包含MWE)使用了一些命名索引,因此我已使用JSON_FORCE_OBJECT
的{{1}}参数对其进行了编码:
在保存到Cookie中之前,已编码的代码如下:
json_encode()
解码后的样子:
{"IsReleased":false,"AgreementDate":null,"ReleasedBy":null}
但是一旦将其保存到stdClass Object
(
[IsReleased] =>
[AgreementDate] =>
[ReleasedBy] =>
)
,引号就会被转义:
$_COOKIE
然后{\"IsReleased\":false,\"AgreementDate\":null,\"ReleasedBy\":null}
返回json_decoded
,抱怨语法:
null
起初,我认为这可能是一个编码问题,并尝试在数组值和编码字符串(ASCII-mb_detect_encoding)上同时使用var_dump(json_decode($_COOKIE['MY_COOL_COOKIE']));
echo json_last_error_msg();
ed的utf8_encode
。 / p>
现在,我发现可以使用array_map()
来删除反斜杠:
str_replace
有我的对象
var_dump(json_decode(str_replace('\\', '', $_COOKIE['MY_COOL_COOKIE'])));
似乎很hacky,我希望我做错了什么。这就是我设置Cookie的方式(使用几个Wordpress常量。):
object(stdClass)[1176]
public 'IsReleased' => boolean false
public 'AgreementDate' => null
public 'ReleasedBy' => null
是否有一种更清洁,更有说服力和/或“正确”的方式来处理此问题?我see in this thread有时也使用$encoded = json_encode($array, JSON_FORCE_OBJECT);
setcookie( 'MY_COOL_COOKIE', $encoded, time()+60*60*24*30, COOKIEPATH, COOKIE_DOMAIN );
。
(我认为preg_replace()
的{{1}}参数不是答案。尝试过。没有帮助。我认为它是用于正斜杠的。)