如何修复 Java 中 URL 中的非法字符?
How to fix illegal characters in URL in Java?
我想要一个函数来检测 URL 中的无效字符并用它们的编码等效项替换它们。例如:
ensureValidUrl("http://example.com/invalid url/") // "http://example.com/invalid%20url/"
我试过 URLEncoder.encode
,但这也编码了我不想要的协议。
static String getValidURL(String invalidURLString){
try {
// Convert the String and decode the URL into the URL class
URL url = new URL(URLDecoder.decode(invalidURLString, StandardCharsets.UTF_8.toString()));
// Use the methods of the URL class to achieve a generic solution
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
// return String or
// uri.toURL() to return URL object
return uri.toString();
} catch (URISyntaxException | UnsupportedEncodingException | MalformedURLException ignored) {
return null;
}
}
结合使用 URI 和 URL 类,您的解决方案可以实现。更多关于 URL and URI and Charsets.
用法:
System.out.println(getValidURL("http://example.com/invalid url/"));
// http://example.com/invalid%20url/
我想要一个函数来检测 URL 中的无效字符并用它们的编码等效项替换它们。例如:
ensureValidUrl("http://example.com/invalid url/") // "http://example.com/invalid%20url/"
我试过 URLEncoder.encode
,但这也编码了我不想要的协议。
static String getValidURL(String invalidURLString){
try {
// Convert the String and decode the URL into the URL class
URL url = new URL(URLDecoder.decode(invalidURLString, StandardCharsets.UTF_8.toString()));
// Use the methods of the URL class to achieve a generic solution
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
// return String or
// uri.toURL() to return URL object
return uri.toString();
} catch (URISyntaxException | UnsupportedEncodingException | MalformedURLException ignored) {
return null;
}
}
结合使用 URI 和 URL 类,您的解决方案可以实现。更多关于 URL and URI and Charsets.
用法:
System.out.println(getValidURL("http://example.com/invalid url/"));
// http://example.com/invalid%20url/