说我有一个URL
http://example.com/query?q=
Run Code Online (Sandbox Code Playgroud)
我有一个用户输入的查询,例如:
随机字500英镑银行$
我希望结果是一个正确编码的URL:
http://example.com/query?q=random%20word%20%A3500%20bank%20%24
Run Code Online (Sandbox Code Playgroud)
实现这一目标的最佳方法是什么?我尝试URLEncoder并创建了URI/URL对象,但它们都没有完全正确.
我的Java独立应用程序从用户获取一个URL(指向一个文件),我需要点击它并下载它.我面临的问题是我无法正确编码HTTP URL地址......
例:
URL: http://search.barnesandnoble.com/booksearch/first book.pdf
java.net.URLEncoder.encode(url.toString(), "ISO-8859-1");
Run Code Online (Sandbox Code Playgroud)
回报我:
http%3A%2F%2Fsearch.barnesandnoble.com%2Fbooksearch%2Ffirst+book.pdf
Run Code Online (Sandbox Code Playgroud)
但是,我想要的是
http://search.barnesandnoble.com/booksearch/first%20book.pdf
Run Code Online (Sandbox Code Playgroud)
(空间由%20取代)
我猜URLEncoder不是为了编码HTTP URL而设计的... JavaDoc说"用于HTML表单编码的实用程序类"......有没有其他方法可以做到这一点?
我试图将参数传递给URL,如下所示:
http://www.foobar.com/foo?imageurl=
Run Code Online (Sandbox Code Playgroud)
并且我想传递由另一个API生成的参数suchas和image URL,并且图像的链接结果如下:
http://www.image.com/?username=unknown&password=unknown
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用URL时:
http://www.foobar.com/foo?imageurl=http://www.image.com/?username=unknown&password=unknown
Run Code Online (Sandbox Code Playgroud)
它不起作用..
我也尝试在imageURL上使用encodeURI和encodeURIComponents,这也行不通.
如何编码查询参数以在Java中的URL上进行编码?我知道,这似乎是一个明显的问题.
我不确定有两个细微之处:
笔记:
java.net.URLEncoder.encode似乎没有用,它似乎是为了提交表单的编码数据.例如,它+代替空间编码空间%20,并编码不必要的冒号.java.net.URI 不编码查询参数我有一个相当典型的REST API,除了资源的id不是整数,而是字符串,通常包含/字符.因此,如果客户的ID是string/with/slashes该客户的URI应该是http://localhost/customers/string%2Fwith%2Fslashes.返回客户列表时,我想用UriBuilder构造URI,这样我就可以把它放在ATOM风格的链接元素的href中.但它不太有效; 这是一个小测试类,显示我的意思:
@Path("/customers")
public class JerseyTest {
@Path("{id}")
public Customer getCustomer(@PathParam("{id}") String id) {
return null;
}
public static void main(String[] args) {
buildURI("string#with#hashes"); // => http://localhost/customers/string%23with%23hashes
buildURI("string/with/slashes"); // => http://localhost/customers/string/with/slashes
}
public static void buildURI(String id) {
UriBuilder builder = UriBuilder.fromUri("http://localhost");
builder.path(JerseyTest.class).path(JerseyTest.class, "getCustomer");
URI uri = builder.build(id);
System.out.println(uri);
}
}
Run Code Online (Sandbox Code Playgroud)
该#太棒了,我们编码为我所期望的,但/我们做不.我尝试使用builder.build(URLEncoder.encode(id)),但随后UriBuilder编码了%,所以你得到了.../string%252Fwith%252Fslashes!
在我看来,不一致的,它编码#和%而不是/,但我怀疑是有很好的理由对此我没有看到.所以我的问题是:
.../string%2Fwith%2Fslashes …对URL字符串进行编码的最佳方法是什么,使它们符合rfc2396并解码符合rfc2396的字符串,例如将%20替换为空格字符?
编辑:URLEncoder和URLDecoder类不编码/解码符合rfc2396的URL,它们编码为MIME类型application/x-www-form-urlencoded,用于编码HTML表单参数数据.