将字符串解析为URL

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将字符串解析为URL相关的知识,希望对你有一定的参考价值。

如何解析动态字符串值以创建URL实例?我需要用%20,重音符号,非ASCII字符替换空格......?

我试图使用URLEncoder,但它也编码/字符,如果我用URLEncoder编码的字符串给URL构造函数我得到一个MalformedURLException(没有协议)。

答案

URLEncoder有一个非常误导性的名字。它是根据Javadocs使用MIME类型application/x-www-form-urlencoded使用的编码格式参数。

据说这可以用于编码例如查询参数。例如,如果参数看起来像&/?#,则其编码等效项可用作:

String url = "http://host.com/?key=" + URLEncoder.encode("&/?#");

除非你有这些特殊需求,否则URL javadocs建议使用new URI(..).toURL,它根据RFC2396执行URI编码。

管理URL编码和解码的推荐方法是使用URI

以下示例

new URI("http", "host.com", "/path/", "key=| ?/#ä", "fragment").toURL();

产生结果http://host.com/path/?key=%7C%20?/%23ä#fragment。请注意?&/等字符是如何编码的。

有关详细信息,请参阅帖子HTTP URL Address Encoding in Javahow to encode URL to avoid special characters in java


编辑

由于您的输入是字符串URL,因此使用URI的参数化构造函数之一将无法帮助您。你也不能直接使用new URI(strUrl),因为它没有引用URL参数。

所以在这个阶段我们必须使用技巧来获得你想要的东西:

public URL parseUrl(String s) throws Exception {
     URL u = new URL(s);
     return new URI(
            u.getProtocol(), 
            u.getAuthority(), 
            u.getPath(),
            u.getQuery(), 
            u.getRef()).
            toURL();
}

在使用此例程之前,必须清理字符串以确保它表示绝对URL。我看到两种方法:

  1. 猜。将http://添加到字符串中,除非它已经存在。
  2. 使用new URL(URL context, String spec)从上下文构造URI
另一答案

所以你要说的是你要编码部分网址而不是整个网页。听起来像你必须把它分成几部分,传递你想通过编码器编码的部分,并重新组装它以获得你的整个URL。

以上是关于将字符串解析为URL的主要内容,如果未能解决你的问题,请参考以下文章

结合两个代码片段?将用户输入的 Youtube url 转换为嵌入 url,然后将 iframe src 替换为转换后的 url

C# |从 URL 抓取 JSON 无法将字符串转换为 int

将字符串解析为URL

使用 XPath 将 URL 查询字符串解析为参数映射

PHP 将url查询字符串解析为数组

Regexp_substr 将字符串解析成片段