【问题标题】:What does %5B and %5D in POST requests stand for?POST 请求中的 %5B 和 %5D 代表什么?
【发布时间】:2012-04-01 16:25:27
【问题描述】:

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

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

我很好奇 user login 键中的 %5B%5D 是什么意思。

如何解码这些数据?

【问题讨论】:

    标签: java post httpwebrequest


    【解决方案1】:

    根据here 的这个答案:str='foo%20%5B12%5D' 编码foo [12]

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

    这称为percent encoding,用于编码url参数值中的特殊字符。

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

    另请注意,如果您希望关注最近的RFC3986 对于 URL,保留方括号(用于 IPv6),因此不 在形成可能是 URL 一部分的内容时进行编码(例如 主机),以下可能会有所帮助。

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

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

    【讨论】:

      【解决方案2】:

      它们代表[]。编码称为"URL encoding"

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          嗯,这是平常的url encoding

          所以它们代表[,分别代表]

          【讨论】:

            【解决方案5】:

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

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

            【讨论】:

              【解决方案6】:

              要快速查看,您可以使用this online tool 进行百分比编码/解码。

              【讨论】:

              • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
              • @Peter 谢谢,但这只是在线工具的链接,在这里可能会有所帮助。由于已经提供了答案,因此无需进一步解释。
              【解决方案7】:

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

              <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] 参数,并将它们变成带有包含这些值的 loginpassword 字段的 user 对象。

              【讨论】:

                【解决方案8】:

                同样重要的是为什么这些符号出现在 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 中)。

                【讨论】:

                  猜你喜欢
                  • 2014-07-25
                  • 2012-12-19
                  • 2021-05-15
                  • 1970-01-01
                  • 2017-01-25
                  • 1970-01-01
                  • 2019-06-26
                  • 2010-09-11
                  相关资源
                  最近更新 更多