为什么 PHP 将 $_COOKIE 中的加号替换为空格?

2023-12-25

所以根据我对 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(使用前将#替换为@)

为什么 PHP 将 $_COOKIE 中的加号替换为空格? 的相关文章

  • 如何使用 php 将 *.xlsb 转换为数组或 *.csv

    我正在尝试转换 xlsb文件到php array or csv文件 或至少 xls 我尝试使用PHPExcel 但看起来它无法识别该文件中的内容 我注意到 你可以重命名 xlsb文件到 zip文件 然后使用命令行解压缩unzip zip 之
  • 在 ruby​​ 中使用 Blowfish 加密字符串返回的字符串比 php 中的相同过程要短

    这让我很困惑 当我尝试使用以下输入用 Blowfish 加密字符串时 key 某个键 输入 输入字符串 我得到以下结果 ruby 79af8c8ee9220bde php 79af8c8ee9220bdec2d1c9cfca7b13c6 我
  • C++ 相当于 PHP 的 pack()

    我的问题很简单 有没有类似 PHP 的pack and unpack C STL 中的函数 如果没有 是否有其他方法可以实现相同的目标 https www php net pack https www php net pack Thanks
  • Codeigniter:Base_url 似乎不起作用

    我开发了一个简单的网站 可以从 Twitter 公共时间线获取推文 将其缓存 60 秒等等 我最近将主机从 Hostgator 移至 Mediatemple 我的网站之前在 Hostgator 上运行良好 我的应用程序不使用数据库连接 也不
  • 客户端和服务器端编程有什么区别?

    我有这个代码 为什么这不会将 bar 写入我的文本文件 而是警告 42 注意 这个问题的早期修订明确涉及服务器上的 PHP 和客户端上的 JavaScript 问题的本质和解决方案是相同的any当一种语言在客户端上运行而另一种语言在服务器上
  • XP及PHP MYSQL 练级系统

    我已经查看了所有提出的问题和答案 但我似乎找不到最适合我的答案 我想做的是开发一个系统 当用户达到一定的 XP 限制时 系统会进入下一个级别 它显示了下一个 XP 之前需要多少 XP So lvl1 0 gt lvl2 256 gt lvl
  • 使用php在html页面中显示bbcode

    我已经有一个 bbcode 字符串 mybbcode b Hello word b 使用 php 我想在 html 页面中以 html 格式显示它 例如 div gt b hello word b div 基本上其他人已经对你说过了 但是如
  • 如何使用 php imap 将邮件消息移动到文件夹

    我似乎无法将邮件移至已保存的文件夹 这是我的代码 mbox imap open mail server mail port mail folder mail username mail password or die Error openi
  • 如何在 PHP 中运行 shell 脚本?

    我正在尝试使用 PHP 触发 shell 脚本的运行 本质上 当用户在我们用 PHP 编写的网站上完成一个操作时 我们希望触发一个 shell 脚本 该脚本本身调用一个 Java 文件 提前致谢 See shell exec http ph
  • filter_input() 何时删除 POST 变量的斜杠?

    我创建了一个小型 PHP 脚本 它在 PHP 5 2 17 的服务器上运行magic quotes gpc指令已启用 我没有对 php ini 文件的写访问权限 并且我想从用户输入中删除所有斜杠 即使magic quotes gpc指令被关
  • 同一路由组的多个前缀

    我正在为一所学校编写一个相当简单的网站 该网站有新闻 文章 视频剪辑 等 它的工作方式是在主页中我们向访问者展示一些课程 例如 gt math gt geography gt chemistry 用户在其中选择 1 网站内容会根据用户的选择
  • 使用 DateTime 类计算日期差异时出错

    我正在尝试使用 DateTime 类 php gt 5 3 来计算 2 个日期的差异 手册中的示例简单明了 我尝试了该示例并且效果很好 但如果改变开始和结束日期 就会出现问题 this gt start date 2011 03 01 th
  • PHP 中的抽象类是什么?

    PHP 中的抽象类是什么 如何使用 抽象类是至少包含一个抽象方法的类 该方法中没有任何实际代码 只有名称和参数 并且已被标记为 抽象 这样做的目的是提供一种模板来继承并强制继承类实现抽象方法 因此 抽象类是介于常规类和纯接口之间的东西 此外
  • 让用户渲染自己的 SVG 文件的安全隐患

    我计划让网站用户上传他们自己的 SVG 文档并使用inkscape or svg2pdf 用户要么未经身份验证 要么经历一个简单的注册过程 所以我预计会有一些黑客尝试 我可以采取哪些过滤措施来最大程度地减少安全威胁 Inkscape 似乎并
  • 如何使用php在mysql数据库中添加照片? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我对 PH
  • 创建 Cookie 时需要帮助

    我有一个名为yes和另一个名叫no
  • 您可以使用 MySQL 查询来完整创建数据库的副本吗

    我有一个包含 5 个表的 MySQL 数据库的实时版本和一个测试版本 我不断使用 phpMyAdmin 将实时版本中的每个表复制到测试版本 有谁有mysql查询语句来制作数据库的完整副本吗 查询字符串需要考虑结构 数据 自动增量值以及与需要
  • 表单提交后显示 $_FILES['image']

    提交表单后如何显示上传的图片 提交表单后 它将是一个预览页面 因此我不会在 MySQLet 中存储图像类型 BLOB 如何显示 FILES image
  • PHP 中的简单 JSON 请求

    我有以下 json country code latitude 45 9390 longitude 24 9811 zoom 6 address city country Romania country code RO region 我只想
  • 使用“AND”表达式构建动态 SQL,而不混淆嵌套条件?

    总的来说 我对 php 和编码相当陌生 我有一系列条件需要测试它们是否已设置 它们是 option1 option2 option3 if isset option1 if isset option2 if isset option3 qu

随机推荐