【问题标题】:Encode URL using java and substitute %20 or other special characters [duplicate]使用 java 编码 URL 并替换 %20 或其他特殊字符 [重复]
【发布时间】:2013-09-24 20:52:13
【问题描述】:

我希望以正确的方式替换像“”(空格)这样的特殊字符(空格的情况下为 %20)对 URL 进行编码。我在网上找到的任何解决方案都没有按预期工作。

我尝试使用 apache commons:

import org.apache.commons.lang.StringEscapeUtils;

public class MyTest {

    public static void main(String[] args)  {

        String bla="http://www.bla.com/bla.php?par1=bla bla bla";

        System.out.println(StringEscapeUtils.escapeHtml(bla));

    }
}

但它会返回:

http://www.bla.com/bla.php?par1=bla bla bla

我尝试使用 java.net.URL:

import java.net.MalformedURLException;
import java.net.URL;

public class MyTest {


    public static void main(String[] args) throws MalformedURLException {

        String bla="http://www.bla.com/bla.php?par1=bla bla bla";

        URL url = new URL(bla);


        System.out.println(url);

    }

}

但它会返回:

http://www.bla.com/bla.php?par1=bla bla bla

我希望:

http://www.bla.com/bla.php?par1=bla%20bla%20bla

有什么办法吗?

【问题讨论】:

标签: java url encoding web


【解决方案1】:

尝试借助 URL 类拆分为 URI

String sUrl = "http://bla.com:8080/test and test/bla.php?query=bla and bla";
URL url = new URL(sUrl);
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
String canonical = uri.toString();

System.out.println(canonical);

输出:

http://bla.com:8080/test%20and%20test/bla.php?query=bla%20and%20bla

【讨论】:

  • 如果 sUrl 中的任何内容已经被百分比编码,这可能会导致双重编码。有什么办法可以解决这个问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-03
  • 2015-11-27
  • 2011-05-08
  • 1970-01-01
  • 2019-10-14
相关资源
最近更新 更多