这是 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"]
你看到它双重转义了我转义的&符号。在这里做什么?
使用此构造函数无法实现您想要实现的目标,因为它仅对 URI 中不允许的字符进行编码。
%
保留用于转义字符,因此必须转义为 %25
。另一方面,&
是用作查询参数分隔符的有效字符,因此必须由该构造函数转义。
在Java中我会做类似的事情
URI.create("https://foobar.net/?foo=" + URLEncoder.encode("Hello&bye", "UTF-8"));
仅转义
foo
查询参数的值。