转义 HttpClient 请求的 URL 中的 & 符号
-
23-09-2019 - |
题
所以我有一些使用 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 字符等,因此需要转义其他所有内容。
解决方案
干得好:
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 有关更多信息。
其他提示
如果您不想逃脱,为什么要打电话给getescapedpathquery()?只需确定谁是责任,并且要保持一致。
使用 URL编码器 班级。
HTML 表单编码的实用程序类。该类包含用于将字符串转换为应用程序/X-WWW形式的哑光模拟哑剧格式的静态方法。有关HTML形式编码的更多信息,请咨询HTML规范。
不隶属于 StackOverflow