1

好的,所以我对最近的一个项目有一个奇怪的要求。为了绕过我们的 CMS 和缓存的限制,我需要在进行几次 AJAX 调用后在 cookie 中存储和更新 JSON 对象。稍后,如果用户完成了一个过程,则存储在此 cookie 中的信息将用于识别之前做出的选择。完成可以跨越几分钟到几周,即。几乎没有时间限制的页面转换。

当我从 $_COOKIE 全局中提取编码的 JSON 字符串时,我开始收到 JSON 语法错误(实际上在此之前出现了错误,但那是我开始弄清楚发生了什么的时候)。我在 Javascript 中使用内置的 JSON.stringify 来设置 cookie 值,在 PHP 中使用 json_decode。

显然,PHP 会在 $_COOKIE 出来的字符串值中转义引号,这会导致 JSON 语法错误,以及之后的级联效应。我在 PHP JSON 函数或 $_COOKIE 文档中没有看到任何提及。我最终在“\”上做了一个 preg_replace 并删除了它们,它现在“工作”了。

这似乎是一个棘手的工作。有/有什么我想念的吗?将来有没有更好的方法来做到这一点?

回显值和 json_last_error() 时:

$cookie = $_COOKIE['cookie_name']; => {\"后缀\":\"一般\"...}
$cookie = json_decode($cookie, true); => 语法错误:NULL
$cookie = preg_replace('/\\/', "", $cookie); => {"suffix":"general"...}
$cookie = json_decode($cookie, true); => 没有错误:数组

4

2 回答 2

4

you need to add the second parameter of json_encode as (some constants need PHP 5.3)

json_encode($data, JSON_HEX_QUOT | JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT);

also, you'll need json_decode(stripslashes($json)) since it seems magic_quotes_gpc is on

于 2012-12-01T07:06:32.483 回答
2

你可能是魔术引语的受害者。
确保它们已关闭。

于 2012-12-01T07:12:38.367 回答