【问题标题】:Validate and encode urls containing unicode characters in Java在 Java 中验证和编码包含 unicode 字符的 url
【发布时间】:2016-11-29 06:50:07
【问题描述】:

我正在开发一个应用程序,我们需要在该应用程序中验证 URL,检查它是否以 http 开头(如果不是,则在前面加上“http”),最后对它们进行编码。我的问题是我们收到的 url 可以包含所有类型的东西 - 无效/有效但不是以 http/已经编码/有效但包含空格或 unicode 字符开头。 目前我正在使用 URLValidator 类,但它不验证空格或 unicode 字符。以下是我的代码:

if (url != null && !url.trim().isEmpty()) {
url = URLDecoder.decode(url, "UTF-8");
if (!url.matches("^(https?)://.*$")) {
    url = "http" + url;
}
UrlValidator validator = new UrlValidator();
if (url.contains("(")) {
    if (validator.isValid(url.substring(0, url.indexOf("(")))) {
        return getEncodedSiteUrl(url);
    }
    return null;
}
if (validator.isValid(url)) {
    return getEncodedSiteUrl(url);
}
}

但此代码会过滤掉所有包含空格/unicode 字符的有效 url。我认为我不应该使用 URLValidator 查看我们获得的所有类型的 url。有人可以帮助/指导我吗?谢谢。

【问题讨论】:

    标签: java validation url


    【解决方案1】:

    检查this URL,其中有您可以使用的方法。

    public static boolean isURL(String url)
    {
       if (url == null) {
         return false;
    }
    // Assigning the url format regular expression
    String urlPattern = "^http(s{0,1})://[a-zA-Z0-9_/\\-\\.]+\\.([A-Za-z/]{2,5})[a-zA-Z0-9_/\\&\\?\\=\\-\\.\\~\\%]*";
    return url.matches(urlPattern);
    }
    

    【讨论】:

    • 感谢您的链接。但这并不能解决我的问题。它不会验证诸如“newsnow.co.uk/h/Sport/Football/Premier League/Transfer News”之类的网址
    • 即使是stackoverflow也不允许。我猜是因为空格。 :)
    • 有空格的url在使用前应该先编码
    • 是的。我尝试了编码,然后使用上面的正则表达式进行验证。它没有通过。
    猜你喜欢
    • 2012-12-24
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    • 1970-01-01
    • 2021-06-01
    • 2012-12-23
    • 2020-02-04
    相关资源
    最近更新 更多