【发布时间】:2012-12-28 14:46:00
【问题描述】:
查看W3 Schools URL encoding webpage,它说@ 应该编码为%40,而space 应该编码为%20。
URLEncoder 和 URI 我都试过了,但上面的都没有:
import java.net.URI;
import java.net.URLEncoder;
public class Test {
public static void main(String[] args) throws Exception {
// Prints me%40home.com (CORRECT)
System.out.println(URLEncoder.encode("me@home.com", "UTF-8"));
// Prints Email+Address (WRONG: Should be Email%20Address)
System.out.println(URLEncoder.encode("Email Address", "UTF-8"));
// http://www.home.com/test?Email%20Address=me@home.com
// (WRONG: it has not encoded the @ in the email address)
URI uri = new URI("http", "www.home.com", "/test", "Email Address=me@home.com", null);
System.out.println(uri.toString());
}
}
出于某种原因,URLEncoder 正确填写了电子邮件地址但没有空格,URI 正确填写了货币但不是电子邮件地址。
我应该如何对这两个参数进行编码以与 w3schools 所说的正确(或者 w3schools 是否错误?)保持一致
【问题讨论】:
-
如果您正在查看 w3schools.com,那么您做错了。参考this
-
@Srinivas 我正在使用的网络服务明确忽略请求,除非参数按照 w3schools 网页上的说明进行编码:(
-
URLEncoder不按照 URL 规范进行编码,而是按照application/x-www-form-urlencodedMIME 格式(这是大多数应用程序服务器对参数键/值的期望。)URI类型编码根据其文档 - 也就是说,它不是一个完整的 URL 构建器。请注意,URI 的不同部分有不同的规则。更多分析请见this post。 -
@McDowell 是的,我想我应该问我如何让 java 做 JavaScript 的 encodeURIComponent() 所做的事情。我会检查你的库。