下面的示例对URL字符串进行编码。请务必检查java文档,因为每个库处理转义URL的方式相似但不同。在设置方法中,我们将引用每个代码段将使用的URI。
private static final String URL_TO_ESCAPE = "http://www.leveluplunch.com?somevar=abc123&someothervar";
URLEncoder和URLDecoder类也可以使用,但只能用于HTML表单编码,这与RFC2396中定义的编码方案不同。在本例中,我们希望使用java对URL进行编码,而不是表单编码。除非您要包装已经执行此行为的方法,否则此方法本身不适合重用。
@Test
public void escape_url_with_straight_java () throws UnsupportedEncodingException {
String urlEscaped = URLEncoder.encode(URL_TO_ESCAPE, "UTF-8")
.replaceAll("\+", "%20")
.replaceAll("\%21", "!")
.replaceAll("\%27", "'")
.replaceAll("\%28", "(")
.replaceAll("\%29", ")")
.replaceAll("\%7E", "~");
assertEquals("http%3A%2F%2Fwww.leveluplunch.com%3Fsomevar%3Dabc123%26someothervar", urlEscaped);
}
使用guava Escaper,我们将展示如何通过调用UrlEscapers.urlPathSegmentEscaper()来转义url参数。此方法将转义字符串,以便在URL路径中使用它们。
@Test
public void escape_url_with_google_guava () {
String urlEscaped = UrlEscapers.urlPathSegmentEscaper().escape(URL_TO_ESCAPE);
assertEquals("http:%2F%2Fwww.leveluplunch.com%3Fsomevar=abc123&someothervar", urlEscaped);
}
使用apachecommon的URLCodec,我们将调用encode方法,该方法将字符串编码为其URL安全形式。
@Test
public void escape_url_with_apache_commons () throws EncoderException {
URLCodec codec = new URLCodec();
String urlEscaped = codec.encode(URL_TO_ESCAPE);
assertEquals("http%3A%2F%2Fwww.leveluplunch.com%3Fsomevar%3Dabc123%26someothervar", urlEscaped);
}
在这个片段中,我们将对给定的URI路径字符串进行编码,以便使用Springframework在给定的URL中安全使用。如果您使用的是Java 7,则可以使用StandardCharsets或Guava Charsets。Guava Charset版本很可能会在未来版本中被弃用。
@Test
public void escpae_url_with_spring () throws UnsupportedEncodingException {
String urlEscaped = UriUtils.encodePath(URL_TO_ESCAPE, Charsets.UTF_8.toString());
assertEquals("http://www.leveluplunch.com%3Fsomevar=abc123&someothervar", urlEscaped);
}
此页面上的所有代码都可以在github:EscapeUrl.java上找到
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : http://www.leveluplunch.com/java/examples/encode-url-string/
内容来源于网络,如有侵权,请联系作者删除!