无法解析带有 # url 的查询参数

Sob*_*nty 5 java url urlencode

无法解析带有 # 的 url 的查询字符串参数。

http://www.example.com/txn/#/user/399AC2F1BB3241823B5E48205C0657FC?utm_source=campaign&utm_medium=testmedium&page=user
Run Code Online (Sandbox Code Playgroud)

URLEncodedUtils.parse 返回零结果。

甚至 URL.getQuery() 也给出 null。

任何通过从 url 中显式删除 # 来解析它的方法。

And*_*eas 3

之后的一切#都是碎片

URL 的构建方式如下(来自Wikipedia):

scheme:[//[user:password@]host[:port]][/]path[?query][#fragment]
Run Code Online (Sandbox Code Playgroud)

您的 URL 分解为(使用URL方案称为协议片段称为ref):

scheme   = http
host     = www.example.com
path     = txn/
query    = 
fragment = /user/399AC2F1BB3241823B5E48205C0657FC?utm_source=campaign&utm_medium=testmedium&page=user
Run Code Online (Sandbox Code Playgroud)

此外,如果您将该 URL 输入到 Web 浏览器中,该片段将由浏览器处理,而不是发送到服务器。


如果您确实想要 a#作为路径组件,则需要对其进行%编码:

http://www.example.com/txn/%23/user/399AC2F1BB3241823B5E48205C0657FC?utm_source=campaign&utm_medium=testmedium&page=user
Run Code Online (Sandbox Code Playgroud)

这将分解(并解码)为:

scheme   = http
host     = www.example.com
path     = txn/#/user/399AC2F1BB3241823B5E48205C0657FC
query    = utm_source=campaign&utm_medium=testmedium&page=user
fragment = 
Run Code Online (Sandbox Code Playgroud)

提取查询后,您可以使用URLEncodedUtils.parse. parse不适用于整个 URL。