PHP Json_encode将空格更改为加号+

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

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

从精细手册 :

请注意,当您发送cookie时,cookie的值部分将自动进行urlencoded,当它被接收时,它会自动解码并通过与cookie名称相同的名称分配给变量。 如果你不想这样,你可以使用setrawcookie()代替你使用PHP 5。

但我认为你仍然希望cookie编码的URL,你只需要%20代替空格而不是+ 。 但是, urlencode

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

你可以尝试使用rawurlencode自己编码:

返回一个字符串,其中除-_.~之外的所有非字母数字字符都替换为百分号(%),后跟两个hex数字。 这是RFC 3986中描述的编码[…]

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