json_encoded字符串已斜线_after_另存为$ _COOKIE

时间:2018-06-26 04:26:38

标签: php json cookies

我正在编码要保存在$_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}}参数不是答案。尝试过。没有帮助。我认为它是用于正斜杠的。)

0 个答案:

没有答案