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。 不幸的是, decodeURI
, decodeURIComponent
甚至不推荐使用的unescape
JavaScript函数都不会将+
转换回空格; 所以,你可能会坚持迫使每个人都很难理解。