如何创建一个 java.net.URI,其查询参数在值中包含&符号

问题描述 投票:0回答:1

这是 Clojure,但希望您可以作为 Java 开发人员阅读它:

我正在使用 this 构造函数来构造 URI。

当我的

foo
查询参数的值中包含空格和与号时,我可以执行以下操作:

(new java.net.URI "https" "foobar.net" "/" "foo= hello&bye " nil )

但这实际上创建了两个参数,因为 & 符号没有转义:

#object[java.net.URI 0x3b809711 "https://foobar.net/?foo=%20hello&bye%20"]

如果我手动转义&符号:

user=> (new java.net.URI "https" "foobar.net" "/" "foo= hello%26bye " nil )
#object[java.net.URI 0x5c84624f "https://foobar.net/?foo=%20hello%2526bye%20"]

你看到它双重转义了我转义的&符号。在这里做什么?

java uri
1个回答
0
投票

使用此构造函数无法实现您想要实现的目标,因为它仅对 URI 中不允许的字符进行编码。

%
保留用于转义字符,因此必须转义为
%25
。另一方面,
&
是用作查询参数分隔符的有效字符,因此必须由该构造函数转义。

在Java中我会做类似的事情

URI.create("https://foobar.net/?foo=" + URLEncoder.encode("Hello&bye", "UTF-8"));

仅转义

foo
查询参数的值。

© www.soinside.com 2019 - 2024. All rights reserved.