gpt4 book ai didi

java - 如何转义 URL 但保持 IPv6 地址周围的方括号不变

转载 作者:行者123 更新时间:2023-11-29 22:01:00 24 4
gpt4 key购买 nike

我有一个 URL,我需要使用 Java 或 Javascript 对其进行百分比编码。

我无法提前知道 URL 是否包含协议(protocol)、端口或路径。我也不知道主机是名称、IPv4 地址还是 IPv6 地址。

这个网址:

  http://[fc00::90:90]/path/to/[file].txt

有两组方括号。第一个没问题,需要 IPv6 地址。但是第二个应该是百分比转义。所以转义后的URL应该是:

http://[fc00::90:90]/path/to/%5Bfile%5D.txt

如何转义第二对而不转义第一对?

我认为 URI.toASCIIString 是显而易见的解决方案,但它不喜欢文件名中的括号并抛出

java.net.URISyntaxException:索引 29 处的路径中存在非法字符:http://[fc00::90:90]/path/to/[file].txt

还有一个选项可以将 URL 解析成它的组成部分并只转义路径部分,但如果可能的话我不想这样做。

谁能建议使用 Java 或 Javascript 的解决方案?谢谢。

最佳答案

我找到的针对此问题的最佳解决方案确实包括将 URL 解析为多个部分,但至少它是使用 java.net.URL Java 库完成的。

java.net.URL 没有转义特殊字符的功能。 java.net.URI 确实具有此类功能,不会在 URL 路径中接受未转义的方括号。下面的方案结合了两者来解决问题:

URL url = new URL(urlString);
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
String escapedURL = uri.toString();

关于java - 如何转义 URL 但保持 IPv6 地址周围的方括号不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23780515/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com