Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java编码URL并替换%20或其他特殊字符_Java_Url_Encoding_Web - Fatal编程技术网

使用java编码URL并替换%20或其他特殊字符

使用java编码URL并替换%20或其他特殊字符,java,url,encoding,web,Java,Url,Encoding,Web,我希望对URL进行编码,以正确的方式替换诸如“”(空格)之类的特殊字符(%20表示空格)。我在网上找到的解决方案没有一个像预期的那样有效 我尝试使用apache commons: import org.apache.commons.lang.StringEscapeUtils; public class MyTest { public static void main(String[] args) { String bla="http://www.bla.com/

我希望对URL进行编码,以正确的方式替换诸如“”(空格)之类的特殊字符(%20表示空格)。我在网上找到的解决方案没有一个像预期的那样有效

我尝试使用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
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 bla bla
我希望:

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

有什么办法吗?

借助
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

您尝试过URLEncoder吗?是的。如果sUrl中的任何内容已被百分比编码,那么这可能会导致双重编码。有什么办法解决这个问题吗?