2012-06-27 130 views
0

我需要一个正则表达式模式,它会查找和替换URL中的括号到它的URL编码。如何用括号编码替换url中的括号?

例如,在碱网址:

http://www.mysite.com/bla/blabla/abc[1].txt 

要变为:

http://www.mysite.com/bla/blabla/abc%5B1%5D.txt 

谁能帮助吗?

EDIT1: 我原来使用commons-httpclient来访问这种类型的网址。 当我使用第一个URL时,我得到一个“转义绝对路径无效”异常。

我不能使用URLENCODER,因为当我使用它时,我得到一个“主机参数为空”异常。

+1

你应该用一个实际的URL编码,而不是一个正则表达式。 – SLaks

+0

你见过[URLEncoder](http://docs.oracle.com/javase/1.4.2/docs/api/java/net/URLEncoder.html)吗?这是否必须是“正则表达式”? – npe

回答

2

下面一行应该做

String s = URLEncoder.encode("http://www.mysite.com/bla/blabla/abc[1].txt", "UTF-8"); 
+0

我试图访问这种与commons-httpclient的URL。 当我使用URLEncoder,Http.getClient()。executeMethod,我得到“主机参数为空”异常。 当我只是改变括号,它工作正常。这就是为什么我要求正则表达式替换,只是括号。 – user1251654

+0

这可能是由于http://部分也被编码。您可以通过使用 String s = s.replaceFirst(“http://”,“”); s =“http://”+ s; –

-1

您是否尝试过URLEncoder.encode的伎俩?在java.net.URLEncoder包中的

编辑:

好吧,我看......你不能整个URL传递给URLEncoder的。 URLEncoder主要用于编码查询参数。

试试这个:

URI uri = new URI("http", "www.mysite.com", "/bla/blabla/abc[1].txt",null); 
    System.out.println(uri.toASCIIString()); 
+0

查看上面的评论为什么URLEncoder有问题 – user1251654

+0

你能发布你的代码吗?我不明白为什么编码不起作用 – Cygnusx1

+0

你可以给一个更通用的方法吗?我的网址并不是真的“www.mysite.com”.... – user1251654