在HttpClient请求的URL中转义&符号

时间:2010-04-01 04:25:19

标签: java http url escaping apache-commons-httpclient

所以我有一些使用Jakarta HttpClient的Java代码:

URI aURI = new URI( "http://host/index.php?title=" + title + "&action=edit" );
GetMethod aRequest = new GetMethod( aURI.getEscapedPathQuery());

问题在于,如果title包含任何&符号(&),则会将它们视为参数分隔符,并且请求变得棘手......如果我将其替换为URL转义等效{{1}然后,这会被getEscapedPathQuery()双重转义为%26

我目前正在通过基本修复损坏来解决这个问题:

%2526

是一个更好的方法,对吧?请注意,标题可以包含任意数量的不可预测的UTF-8字符等,因此需要转义其他所有内容。

3 个答案:

答案 0 :(得分:14)

你走了:

import java.net.URLEncoder;
...
...
URI aURI = new URI( "http://host/index.php?title=" + URLEncoder.encode(title,"UTF-8") + "&action=edit" );
GetMethod aRequest = new GetMethod( aURI.getPathQuery());

查看java.net.URLEncoder了解详情。

答案 1 :(得分:1)

如果您不想转义,为什么要调用getEscapedPathQuery()?只需确定谁的责任并保持一致。

答案 2 :(得分:0)

使用URLEncoder类。

  

HTML表单编码的实用程序类。这个类包含静态   将String转换为的方法   application / x-www-form-urlencoded MIME格式。欲获得更多信息   关于HTML表单编码,请参阅HTML规范。