PHP cookie 特殊字符

标签 php

我在 javascript 中的 cookie 中存储了多个信息。信息片段之间用“+”号分隔,例如 document.cookie ='cookie1'+'='+inf1+'+'+inf2

但是当我从 PHP 中回显这些 cookie 时,分隔的“+”号被替换为空格。

我尝试用addslashes进行回显,但没有成功。当我警告 JS 的 cookie 时,它​​没问题,它显示分隔“+”号。

有人知道这个问题的解决方案吗?

最佳答案

这很奇怪 - 没有任何规范表明 cookie 应该被视为 application/x-www-form-urlencoded :

  • Netscape’s original draft声明:

    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/

相关文章:

javascript - 使用 Javascript CSS 在菜单中突出显示当前 PHP 页面

php - 为什么当打开 PHPExcel 生成的 xls 文件然后单击保存时大小减小?

php - 真正导致 PHP MySQL 库版本与您的 MySQL 服务器版本不同的原因是什么?

php - 在 Laravel 中获取点 mysql 列

php - 如何使用 php 运行 abc.exe

javascript - 使用 backbone.js 和其他服务器脚本语言将数据存储在 mysql 中

php - 复合查询中的 mysqli_insert_id

PHP 查找 require_once 真实路径

php - preg_match 或运算符

php - 如何更改 Mantis 中的配置文件?