我在 javascript 中的 cookie 中存储了多个信息。信息片段之间用“+”号分隔,例如 document.cookie ='cookie1'+'='+inf1+'+'+inf2
。
但是当我从 PHP 中回显这些 cookie 时,分隔的“+”号被替换为空格。
我尝试用addslashes进行回显,但没有成功。当我警告 JS 的 cookie 时,它没问题,它显示分隔“+”号。
有人知道这个问题的解决方案吗?
最佳答案
这很奇怪 - 没有任何规范表明 cookie 应该被视为 application/x-www-form-urlencoded :
-
NAME=VALUE
This string is a sequence of characters excluding semi-colon, comma and white space. If there is a need to place such data in the name or value, some encoding method such as URL style
%XX
encoding is recommended, though no encoding is defined or required.这就是简单的 percent-encoding .
RFC 2109状态:
cookie = NAME "=" VALUE *(";" cookie-av) NAME = attr VALUE = value
其中attr和值指定为:
attr = token value = word word = token | quoted-string
并且 token 和引用字符串在HTTP/1.1中指定可以分别用这些正则表达式来表示:
[!#$%&'*+\-.0-9A-Za-z^_`|~]+ "([ \x21\x23-\x7E\x80-\xFF]|(\r\n)?[ \t]+|\\[\x00-\x7F])*"
因此,这也不是 application/x-www-form-urlencoded,而是基于 HTTP 的扩展首选的不同格式。
RFC 2965关于 cookie 语法,没有指定任何与 RFC 2109 不同的内容:
cookie = NAME "=" VALUE *(";" set-cookie-av) NAME = attr VALUE = value
因此,仅在 application/x-www-form-urlencoded 中替换的 +
不应被 cookie 中的空格替换。所以这是 PHP 的错误行为。
关于PHP cookie 特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5363342/