我无法告诉你我在这些愚蠢的错误上浪费了多少小时。
我基本上是在构建一个 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
。
但是它们为什么存在?
答案 0 :(得分:0)
那么什么时候会想要使用它们
我最近遇到一个案例,我们向 S3 存储桶添加了触发器,这些触发器由 Lambda 函数获取并通过 HTTP 请求发送到 API 端点。
如果 S3 上的文件路径是多字的,它将用 +
替换空格,此时它会破坏我们的代码,因为技术上路径不正确。
一旦你通过 urldecode
运行它,它就会成为一个有效的路径,因为根据文档:
解码给定字符串中的任何 %## 编码。 加号 ('+') 被解码为空格字符。
这将是此功能的有效用例,因为不涉及浏览器。只是后台进程/请求。