所以根据我对 PHP 和 cookie 的理解,如果我使用setcookie()
函数,然后我得到一个自动 url 编码的 cookie。当我去$_COOKIE
数组,我应该取回 cookie,自动 url 解码。问题是,当我查看时,它似乎对 cookie 进行了两次解码$_COOKIE
.
假设我有一个 cookie,其值为“Name|ID|Email”,例如:
Joe|123|[电子邮件受保护] /cdn-cgi/l/email-protection
这将被编码为:
乔%7C123%7Cmy%2Bemail%40somewhere.com
请注意,加号已被编码,因此理论上,如果我对其进行解码,我应该将其恢复。由于这是自动完成的$_COOKIE
,我应该回到我开始的地方。但相反,我回来了:
乔|123|我的[电子邮件受保护] /cdn-cgi/l/email-protection
注意原来加号所在的空格。如果我额外运行一次,这就是我所期望的urldecode()
在饼干上。但我不是,所以我不知道为什么我会得到一个空格而不是一个加号。
另一个有趣的转折。页面刷新似乎会产生正确的输出。有什么想法为什么会这样吗?
仅供参考,为了设置初始 cookie,我使用 javascript 和escape()
生成编码字符串的脚本。这可能是 javascript 和 PHP 之间的交接问题吗?
想法将不胜感激。
值得注意的是,“%20”和“+”都是空格字符的有效编码。根据维基百科文章URL编码 http://en.wikipedia.org/wiki/URL_encoding(强调):
当提交已输入 HTML 表单的数据时,表单
字段名称和值被编码并通过 HTTP 发送到服务器
使用 GET 或 POST 方法请求消息,或者过去通过电子邮件请求消息。
默认使用的编码基于非常早期的版本
一般 URI 百分比编码规则,有一些修改
例如换行规范化和用“+”代替空格
“%20”。以这种方式编码的数据的 MIME 类型是
application/x-www-form-urlencoded,目前已定义(仍然
HTML 和 XForms 规范中以一种非常过时的方式)。
更具体地与 PHP 和 JavaScript 相关,请参阅此问题的最佳答案:
何时将空格编码为加号 (+) 或 %20? https://stackoverflow.com/questions/2678551/when-to-encode-space-to-plus-and-when-to-20
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)