java 如何避免递归URL解码

6yoyoihd  于 2023-01-04  发布在  Java
关注(0)|答案(2)|浏览(134)

我写的东西像一个图像代理,我从我的网站前端接收网址,我下载图像,重新调整大小,并返回较小的图像前端和客户端下载从“代理”.这意味着我需要照顾各种各样的网址模式,这就是为什么我选择解码给定的网址,而不是编码它使用URIUtils.解码:

private String fixUrl(String fromUrl) throws URIException {
    fromUrl = URIUtil.decode(fromUrl);
    fromUrl = URIUtil.encodeQuery(fromUrl);
    return fromUrl;
}

这应该可以帮助我处理已经编码的网址。我的问题是有些网址是双重编码的,从我所看到的,URIUtils.decode,执行递归解码,这意味着在双重编码的网址的情况下,我会得到一个不工作的坏网址。
有没有一种简单的方法只解码一次?

pgvzfuti

pgvzfuti1#

我会尝试检查该网址仍然包含字符%。如果它不包含任何%它是不编码的,你可以停止你的解码过程。

yb3bgrhw

yb3bgrhw2#

我知道的最简单的选择是使用内置的

java.net.URLDecoder.decode

以便只自动解码一次。
如果像我一样,你有情况下,有时URL的双重/三重编码-你可以使用这个递归函数,以解码一次又一次,直到没有“%”或“+”:

private static String completeDecode(String url) {
    if(url.contains("%") || url.contains("+"))
    {
        try
        {
            return(completeDecode(java.net.URLDecoder.decode(url, "UTF-8")));
        }
        catch (UnsupportedEncodingException e)
        {
            e.printStackTrace();
        }
    }
    return url;
}

干杯

相关问题