1

我有一个带有可替换值的 URL 字符串:

  http://DOMAIN:PORT/sendmsg?user=test&passwd=test00&text={CONTENT}

我必须对内容部分进行编码,所以我尝试了这个:

  String tempContent = URLEncoder.encode(content, "UTF-8");

tempContent 有这个值: This+is+test+one 我不想要空格所在的 +。空格必须由 %20 表示

现在,我可以这样做:

  String tempContent = content.replaceAll(" ", "%20");

但这只涵盖了空间,我无法控制内容输入。有没有其他有效的方法来在 Java 中编码 URL 内容?URLEncoder 没有做我想做的事。

提前致谢..

4

2 回答 2

2

我终于让它工作了,我用过

  URIUtil.encodeQuery(url);

使用 %20 正确编码的空格。这来自 Apache commons-httpclient 项目。

于 2013-06-06T08:07:30.670 回答
0

一种解决方案是使用扩展 URI 模板的库(这是 RFC 6570)。我知道至少一个(免责声明:这是我的)。

使用这个库,你可以这样做:

final URITemplate template
    = new URITemplate("http://DOMAIN:PORT/sendmsg?user=test&passwd=test00&text={CONTENT}");

final VariableValue value = new ScalarValue(content);

final Map<String, VariableValue> vars = new HashMap<String, VariableValue>();
vars.put("CONTENT", value);

// Obtain expanded template
final String s = template.expand(vars);

// Now build a URL out of it

允许映射作为值(MapValue在我的实现中这是一个;RFC 将这些称为“关联数组”),因此,例如,如果您有一个带有(正确填充)条目的映射,user您可以将模板编写为:passwdtext

http://DOMAIN:PORT/sendmsg{?parameters*}

地图值parameters包含:

"user": "john",
"passwd": "doe",
"content": "Hello World!"

这将扩展为:

http://DOMAIN:PORT/sendmsg?user=john&passwd=doe&content=Hello%20World%21
于 2013-06-06T07:31:03.563 回答