查询字符串中Hash(#)的行为是什么

She*_*nar 9 java url web-applications url-encoding

我发送下面的URL与查询字符串.在查询字符串中,一个参数"approverCmt"具有带散列(#)的值.

    "/abc/efd/xyz.jas?approverCmt=Transaction Log #459505&batchNm=XS_10APR2015_082224&mfrNm=Timberland"
Run Code Online (Sandbox Code Playgroud)

在服务器端,当我试图从我得到的请求中检索它

    approverCmt = Transaction Log  -----> "#459505" is missing
    batchNm = null
    mfrNm = null
Run Code Online (Sandbox Code Playgroud)

如果我从查询字符串中删除哈希(#)或如果我用%23替换#,那么每件事都可以

如果另一个参数包含一个哈希(#)符号,我不明白为什么我为一个参数获取null.

感谢任何人都可以解释.

Pra*_*ant 12

这被称为"片段标识符".

正如维基百科所述:

fragment identifier由井号#介绍的是一个可选的最后一部分URL为一个文件.它通常用于标识该文档的一部分.

之后的部分#是信息client.它不会发送到服务器.在这里只放置浏览器所需的一切.

您可以使用encodeURIComponent()JavaScript中的函数对URL中的特殊字符进行编码,以便将#字符转换为其他字符,这样您就可以确保将整个URL发送到服务器.

  • 还值得一提的是,在此字符(如果是非编码的)未发送到服务器之后放置的所有内容,只有可用的客户端,解释OP的问题. (4认同)