PHP Json_encode将空格更改为加号+

时间:2011-07-25 04:42:03

标签: php jquery json

我有一个Web应用程序,我首先将JSON数据存储在cookie中,然后每隔x秒保存到数据库。它只是打开与服务器的连接,服务器读取cookie。它实际上并不通过POST或GET发送任何内容。

当我保存到cookie时,我的数据格式正常。但是,当我在PHP中使用它然后setcookie一个新的json_encoded数组时,它用+符号替换空格,然后这些显示在我的web应用程序中。我找不到任何方法来禁用json_encode的字符串编码,也不能解析那些加上符号的JS方法(使用jQuery.parseJSON; stringify的解析也不起作用)...有没有人有任何想法:S?

1 个答案:

答案 0 :(得分:4)

来自fine manual

  

请注意,当您发送cookie时,cookie的值部分将自动进行urlencoded编码,当收到cookie时,会自动解码并将其分配给与Cookie名称相同的变量。如果您不想这样,那么如果您使用的是PHP 5,则可以使用setrawcookie()

但我认为您仍然希望对Cookie进行编码,您只需要%20代替+。但是,urlencode

  

[...]由于历史原因,空格被编码为加号(+)符号

您可以尝试使用rawurlencode自行编码:

  

返回一个字符串,其中除-_.~之外的所有非字母数字字符都已替换为百分号(%),后跟两个十六进制数字。这是RFC 3986 [...]

中描述的编码

然后setrawcookie设置Cookie。不幸的是,decodeURIdecodeURIComponent甚至已弃用的unescape JavaScript函数都不会将+转换回空格;所以,你可能会坚持迫使每个人都很难理解。