繁体   English   中英

用Java编码URL的内容部分

[英]Encode content part of URL in Java

我有一个具有可替换值的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不能满足我的要求。

提前致谢..

我终于有了这个工作,我曾经

  URIUtil.encodeQuery(url);

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

一种解决方案是使用扩展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称为这些“关联数组”),因此,例如,如果您的地图包含(正确填充的) userpasswdtext条目,则可以编写模板为:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM