java.net.URLEncoder # кодировать для пробелов

java.net.URLEncoder закодирует один пробел с помощью +.

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

Однако, согласно этому doc W-3, разве он не должен быть закодирован с помощью %20?


person Kevin Meredith    schedule 24.07.2015    source источник
comment
см. stackoverflow.com/questions/5442658/spaces-in-urls   -  person Florian Schaetz    schedule 24.07.2015


Ответы (1)


Из DOCS (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. Prior является поведением по умолчанию.

Например:

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/

person My God    schedule 24.07.2015