2011-09-21 50 views
5

我需要将参数值编码到URL中。如果我使用下列内容:使用Java编码URL中的参数值

URLEncoder.encode(url, "UTF-8"); 

像这样的URL:http://localhost:8080/...

将编码“://”等我需要的仅仅是从开始的参数值编码的所有网址字符串。因此,在这种情况下:

http://localhost/?q=blah&d=blah

我想编码只在2个参数值(当然-n参数)的“嗒嗒”。

你最好的方法是什么?

感谢

随机化

回答

5

你以错误的方式使用URLEncoder的。您应该分别编码每个参数值,然后将url组合在一起。

例如


String url = "http://localhost/?q=" + URLEncoder.encode ("blah", "UTF-8") + "&d=" + URLEncoder.encode ("blah", "UTF-8"); 

+0

是的,我知道,问题是,我得到了一个网址已“完成”,我无法更改生成它的代码 – Randomize

+0

为什么您需要对其进行编码?它是否包含非ASCII字符? –

+1

然后你需要建立一个'URL'并得到参数(或者如果你对URL的有效性有信心,可以将它分割成第一个'?'),把它们分成'&'(如果你不想那么做编码),编码它们,然后重建它。 –

2

对于像http://localhost/hello/sample?param=bla一个网址,你可以使用这个(从Java的java.net.URI中的类):

URI uri = new URI("http", "localhost", "/hello/sample", "param=bla", null); 
String url = uri.toASCIIString(); 
+0

这种方式需要使用URLEncoder预编译查询字符串来编码特殊字符。事实证明Randomize将整个网址作为输入,而不是其中的部分。 –

+0

那么,URL可以很容易地分解(分割)成这些部分,并传递。 – Saket