【发布时间】:2011-10-12 07:33:37
【问题描述】:
我有一个网络应用程序,我首先将 JSON 数据存储在 cookie 中,然后每隔 x 秒保存到数据库中。它只是打开到服务器的连接,然后服务器读取 cookie。它实际上并不通过 POST 或 GET 发送任何内容。
当我保存到 cookie 时,我的数据格式正确。但是,当我在 PHP 中使用它然后 setcookie 一个新的 json_encoded 数组时,它用 + 符号替换空格,然后这些显示在我的 Web 应用程序中。我找不到任何方法来禁用 json_encode 的字符串编码,也找不到解析这些加号的 JS 方法(使用 jQuery.parseJSON;stringify 的解析也不起作用)......有人知道吗:S?
【问题讨论】:
-
空格可以在 URL 编码文本中表示为
+,而 cookie 是 URL 编码的,因此有人没有在正确的时间解码。 -
干杯。让我想到了 urldecode。出于某种原因,这有效:
json_encode(urldecode($array)),我在最后重新设置 cookie 时这样做。当 PHP 读入 cookie 时解码什么也没做。让我觉得 json_encode 可能会对它做些什么? -
+第一次出现在哪里?当您从 cookie 中提取 JSON 时,您是否在客户端看到它?它是否首先出现在服务器上(在您尝试将数据视为 JSON 之前)? -
urldecode 实际上并没有修复它:p 哈哈.. 大声笑。好的,所以 + 只有在我运行
setcookie('order',json_encode($newCookie),time()+18000, '/');后才会显示...我使用$.parseJSON(cookiecontents);解析它如果我将数据从 javascript 保存到 cookie,那很好。如果我重新加载页面并再次解析 cookie 以填写订单,则没有 +s。但是当我通过 PHP 设置 cookie 然后解析它时,它增加了优点。与它作为响应标头从服务器传递有关吗?? -
好吧,看起来 JSON.stringify(objects) 将空格编码为 %20,但随后 setcookie 或 JSON 编码,将它们编码为加号(在响应标头中)和 $.parseJSON() JSON.parse() 也不能将+转换为空格...设置cookie时无法设置编码类型吗?