我有一个Web应用程序,我首先将JSON数据存储在cookie中,然后每隔x秒保存到数据库。它只是打开与服务器的连接,服务器读取cookie。它实际上并不通过POST或GET发送任何内容。
当我保存到cookie时,我的数据格式正常。但是,当我在PHP中使用它然后setcookie一个新的json_encoded数组时,它用+符号替换空格,然后这些显示在我的web应用程序中。我找不到任何方法来禁用json_encode的字符串编码,也不能解析那些加上符号的JS方法(使用jQuery.parseJSON; stringify的解析也不起作用)...有没有人有任何想法:S?
答案 0 :(得分:4)
来自fine manual:
请注意,当您发送cookie时,cookie的值部分将自动进行urlencoded编码,当收到cookie时,会自动解码并将其分配给与Cookie名称相同的变量。如果您不想这样,那么如果您使用的是PHP 5,则可以使用
setrawcookie()
。
但我认为您仍然希望对Cookie进行编码,您只需要%20
代替+
。但是,urlencode
:
[...]由于历史原因,空格被编码为加号(+)符号
您可以尝试使用rawurlencode
自行编码:
返回一个字符串,其中除
中描述的编码-_.~
之外的所有非字母数字字符都已替换为百分号(%),后跟两个十六进制数字。这是RFC 3986 [...]
然后setrawcookie
设置Cookie。不幸的是,decodeURI
,decodeURIComponent
甚至已弃用的unescape
JavaScript函数都不会将+
转换回空格;所以,你可能会坚持迫使每个人都很难理解。