PHP $ _COOKIE global中的Escaped JSON

时间:2012-12-01 07:01:01

标签: php javascript json

好的,所以我对最近的一个项目有一个奇怪的要求。为了解决我们的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); => {"后缀":"一般" ...}
  $ cookie = json_decode($ cookie,true); =>没有错误:ARRAY

2 个答案:

答案 0 :(得分:3)

你需要添加json_encode的第二个参数(一些常量需要PHP 5.3)

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

另外,您需要json_decode(stripslashes($json)),因为magic_quotes_gpc似乎在

答案 1 :(得分:2)

你可能是magic quotes的受害者 确保它们已关闭。