Java实现URL编码

x33g5p2x  于2022-10-12 转载在 其他  
字(1.9k)|赞(0)|评价(0)|浏览(1195)

下面的示例对URL字符串进行编码。请务必检查java文档,因为每个库处理转义URL的方式相似但不同。在设置方法中,我们将引用每个代码段将使用的URI。

设置测试数据

private static final String URL_TO_ESCAPE = "http://www.leveluplunch.com?somevar=abc123&someothervar";

直接Java实现

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

使用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);
}

Apache common包

使用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);
}

Spring框架

在这个片段中,我们将对给定的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上找到

相关文章