【问题标题】:What is the point of rawurldecode() and urldecode() when the browser apparently does it automatically?当浏览器显然自动执行时, rawurldecode() 和 urldecode() 有什么意义?
【发布时间】:2021-10-07 05:10:30
【问题描述】:

我无法告诉你我在这些愚蠢的错误上浪费了多少小时。

我基本上是在构建一个 URL,例如:https://example.com/?test=' . urlencode('meow+foo@gmail.com');

然后,我从 URL 中显示它,如下所示:echo urldecode($_GET['test']);

然后显示:meow foo@gmail.com

呃。

如果我改为这样做:echo $_GET['test'];

我得到:meow+foo@gmail.com

(当然,回显这样的 GET 变量是很疯狂的,所以我当然会在现实中围绕它做htmlspecialchars。但这不是我要在这里提出的重点。)

因此,由于浏览器(或其他东西)显然会自动进行这种“翻译”或“解码”,因此通过删除某些字符(在本例中为“+”(加号))再次执行此操作会导致混乱。这让我相信我根本不应该使用urldecode/rawurldecode

但是它们为什么存在呢?

【问题讨论】:

  • $_GET 上的 PHP 手册声称:The GET variables are passed through urldecode().
  • @PaulT。那么什么时候会想要使用它们呢?
  • 我不知道我曾经使用过rawurldecode,但在应用了编码的第 3 方 API 上使用过 urldecode

标签: php browser get urldecode


【解决方案1】:

那么人们什么时候想要使用它们

我最近遇到了一个案例,我们向 S3 存储桶添加了触发器,该存储桶被 Lambda 函数提取并通过 HTTP 请求发送到 API 端点。

如果 S3 上的文件路径是多字的,它会将空格替换为 +,此时它会破坏我们的代码,因为从技术上讲路径不正确。

一旦您通过urldecode 运行它,它就会成为有效路径,因为根据文档:

解码给定字符串中的任何 %## 编码。 加号 ('+') 被解码为空格字符。

这将是此功能的有效用例,因为不涉及浏览器。只是后台进程/请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多