【问题标题】:java.net.URLEncoder#encode for Whitespace [duplicate]java.net.URLEncoder#encode for Whitespace [重复]
【发布时间】:2015-10-15 05:12:19
【问题描述】:

java.net.URLEncoder 将使用+ 对单个空格进行编码。

scala> val encodedSpace = URLEncoder.encode(" ", "UTF-8")
encodedSpace: String = +

但是,根据这个 W-3 doc,它不应该用 %20 编码吗?

【问题讨论】:

标签: java url-encoding


【解决方案1】:

来自文档 (http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4):

application/x-www-form-urlencoded

这是默认的内容类型。使用此内容类型提交的表单必须编码如下:

  1. 控件名称和值被转义。空格字符被替换 由+', and then reserved characters are escaped as described in [RFC1738], section 2.2: Non-alphanumeric characters are replaced by %HH'、一个百分号和两个十六进制数字表示 字符的 ASCII 码。换行符表示为“CR LF” 对(即 `%0D%0A')。

  2. 控件名称/值按照它们在 文档。名称与值之间用=' and name/value pairs are separated from each other by&' 分隔。

您必须将其从 + 替换为 %20。先验是默认行为。

例如:

System.out.println(java.net.URLEncoder.encode(" ", "UTF-8").replace("+", "%20"));

以上是application/x-www-form-urlencoded的典型案例。

总结:

multipart/form-data 使用MIME encoding。

application/x-www-form-urlencoded 使用 +。

Properly encoded URIs 使用%20。

获取提交:

http://www.bing.com/search?q=hello+world

名称中带有空格的资源

http://camera.phor.net/cameralife/folders/2012/2012-06%20Pool%20party/

【讨论】:

    猜你喜欢
    • 2015-03-27
    • 2016-10-12
    • 2011-06-28
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 2011-03-18
    • 2013-04-15
    • 2016-09-16
    相关资源
    最近更新 更多