如何使用 java.net.URI

发布于 2024-12-03 21:49:51 字数 598 浏览 1 评论 0原文

我尝试使用 java.net.URI 来操作查询字符串,但即使是非常简单的任务(例如从一个 url 获取查询字符串并将其放入另一个 url 中)我也未能成功。

您知道如何使下面的代码正常工作吗?

URI sample = new URI("test?param1=x%3D1");
URI uri2 = new URI(
            "http",
            "domain",
            "/a-path",
            sample.getRawQuery(),
            sample.getFragment());

调用 uri2.toASCIIString() 应返回:http://domain/a-path?param1=x%3D1 但它返回: http://domain/a-path?param1=x%253D1 (双重编码)

如果我使用 getQuery() 而不是 getRawQuery() 查询字符串根本不编码网址如下所示:http://domain/a-path?param1=x=1

I've tried to use java.net.URI to manipulate query strings but I failed to even on very simple task like getting the query string from one url and placing it in another.

Do you know how to make this code below work

URI sample = new URI("test?param1=x%3D1");
URI uri2 = new URI(
            "http",
            "domain",
            "/a-path",
            sample.getRawQuery(),
            sample.getFragment());

Call to uri2.toASCIIString() should return: http://domain/a-path?param1=x%3D1
but it returns: http://domain/a-path?param1=x%253D1 (double encoding)

if I use getQuery() instead of getRawQuery() the query string is not encoded at all and the url looks like this: http://domain/a-path?param1=x=1

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

戒ㄋ 2024-12-10 21:49:51

问题是第二个构造函数将使用 URL 编码对查询和片段进行编码。但是 = 是一个合法的 URI 字符,所以它不会为你编码;并且 % 不是合法的 URI 字符,因此它将会对其进行编码。在这种情况下,这与您想要的完全相反。

因此,您不能使用第二个构造函数。使用第一个,通过自己将字符串的各个部分连接在一起。

The problem is that the second constructor will encode the query and fragment using URL encoding. But = is a legal URI character, so it will not encode that for you; and % is not a legal URI character, so it will encode it. That's exactly the opposite of what you want, in this case.

So, you can't use the second constructor. Use the first one, by concatenating the parts of the string together yourself.

玉环 2024-12-10 21:49:51

您能否通过调用 java.net.URLEncoder.encode(String) 来包装对 getQuery() 的调用?

URI sample = new URI("test?param1=x%3D1");
URI uri2 = new URI(
        "http",
        "domain",
        "/a-path",
        URLEncoder.encode(sample.getQuery(), "UTF-8"),
        sample.getFragment());

Could you wrap the call to getQuery() with a call to java.net.URLEncoder.encode(String)?

URI sample = new URI("test?param1=x%3D1");
URI uri2 = new URI(
        "http",
        "domain",
        "/a-path",
        URLEncoder.encode(sample.getQuery(), "UTF-8"),
        sample.getFragment());
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文