POST 请求中的 %5B 和 %5D 代表什么?

IT小君   2021-10-24T04:58:37

我正在尝试编写一个 Java 类来登录某个网站。POST登录请求发送的数据为

user%5Blogin%5D=username&user%5Bpassword%5D=123456

我很好奇关键用户 login 中%5B%5D意味着什么

我如何解码这些数据?

评论(8)
IT小君

按照这个答案在这里str='foo%20%5B12%5D'编码foo [12]

%20 is space
%22 is quotes
%5B is '['
and %5D is ']'

这称为百分比编码,用于对 url 参数值中的特殊字符进行编码。

编辑顺便说一下,当我阅读https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/encodeURI#Description 时我突然想到为什么有这么多人进行相同的搜索。请参阅页面底部的注释:

另请注意,如果希望遵循更新 的 URL RFC3986,保留方括号(用于 IPv6),从而在形成可能是 URL 一部分的内容(例如主机)时不进行编码,以下内容可能会有所帮助。

function fixedEncodeURI (str) {
    return encodeURI(str).replace(/%5B/g, '[').replace(/%5D/g, ']');
}

希望这能帮助人们在偶然发现这个问题时解决他们的问题。

2021-10-24T04:58:38   回复
IT小君

他们代表[]这种编码称为“URL 编码”

2021-10-24T04:58:38   回复
IT小君

[]%5B%5D在 URL 编码时被替换

2021-10-24T04:58:38   回复
IT小君

嗯,这是通常的url 编码

所以它们[分别代表]

2021-10-24T04:58:38   回复
IT小君

要找出这些值,您只需在浏览器中使用 Console 并执行以下操作

console.log(decodeURI('user%5Blogin%5D=username&user%5Bpassword%5D=123456'))

2021-10-24T04:58:38   回复
IT小君

为了快速浏览,您可以使用此在线工具进行百分比编码/解码

2021-10-24T04:58:38   回复
IT小君

数据可能最初是从一个看起来有点像这样的网络表单发布的(但可能要复杂得多):

<form action="http://example.com" method="post">

  User login    <input name="user[login]"    /><br />
  User password <input name="user[password]" /><br />

  <input type="submit" />
</form>

如果方法是“get”而不是“post”,点击提交按钮会带你到一个看起来像这样的 URL:

http://example.com/?user%5Blogin%5D=username&user%5Bpassword%5D=123456

或者:

http://example.com/?user[login]=username&user[password]=123456

另一端的 Web 服务器可能会采用user[login]user[password]参数,并将它们变成一个user对象,其中loginpassword字段包含这些值。

2021-10-24T04:58:39   回复
IT小君

最重要的是为什么这些符号出现在 url 中。参见https://www.php.net/manual/en/function.parse-str.php#76792,特别是:

parse_str('foo[]=1&foo[]=2&foo[]=3', $bar);

以上产生:

$bar = ['foo' => ['1', '2', '3'] ];

以及在数组中分离查询变量的方法是什么(至少在 php 中)。

2021-10-24T04:58:39   回复