5

所以我有一些使用 Jakarta HttpClient 的 Java 代码,如下所示:

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

问题是,如果title包含任何&符号(&),它们被认为是参数分隔符并且请求变得混乱......如果我将它们替换为 URL 转义等效项%26,那么这将被 getEscapedPathQuery() 双重转义为%2526.

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

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

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

4

3 回答 3

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了解更多信息。

于 2010-04-01T04:30:09.430 回答
1

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

于 2010-04-01T07:13:42.223 回答
0

使用URLEncoder类。

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

于 2010-04-01T04:31:21.203 回答