这是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中允许的not个字符.%是为转义字符保留的,因此必须转义为%25.另一方面,&是用作查询参数分隔符的有效字符,因此must not可由该构造函数转义.

在Java中,我会这样做,

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

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

它们只转义foo查询参数值中的无效字符.

Java相关问答推荐

Java 8 RDX-如何设置单个选项卡标题文本的 colored颜色

Spring安全实现多个SQL表身份验证

BiPredicate和如何使用它

空手道比赛条件

我想了解Java中的模块化.编译我的应用程序时,我有一个ResolutionException

CompleteableFuture是否运行在不同的内核上?

Spring data JPA/Hibernate根据id获取一个列值

放气总是压缩整个街区吗?

由于 list 中的权限错误,Android未生成

将PNG转换为位图自定义十六进制字符串

Spring Boot&;Docker:无法执行目标org.springframework.boot:spring-boot-maven-plugin:3.2.0:build-image

Java泛型类方法的静态返回类型是否被类型擦除?

try 使用Spring集成和MySQL实现发件箱模式时,锁定等待超时

根本不显示JavaFX阿拉伯字母

具有多个模式的DateTimeForMatter的LocalDate.parse失败

Java KeyListener不工作或被添加

当使用不同的参数类型调用时,为什么围绕Objects.equals的类型安全包装不会失败?

如何使用Rascal Evaluator从编译的JAR访问Rascal函数?

升级版本后出现非法访问错误

在数组中查找素数时出现逻辑错误