В URL пробелы должны быть закодированы с помощью %20 или +? [дубликат]

Не попадайте в прерывание не документирования Вашего кода! это, я думаю, один из советов, о котором легко забывают, потому что, эй Вы записали можение себя так, необходимо ли знать то, что это делает, правильно?... неправильно! просто заберите один из своих проектов прошлого года и выясните, как вещи работали, не используя документации вообще, это похоже на чтение кого-то еще (плохой) код.

я всегда поощряю меня использовать стандарт стиль документации, как javadoc для Java или эквивалент для.NET в коде, но действительно любой вид документации не лучше тогда ни один вообще...

111
задан Cole Johnson 6 June 2014 в 15:36
поделиться

4 ответа

Данные формы (для GET или POST) обычно кодируется как application / x-www-form-urlencoded : это указывает + для пробелов.

URL-адреса кодируются как RFC 1738 , который определяет % 20 .

Теоретически я думаю, что у вас должно быть% 20 ​​перед ? и + после:

example.com/foo%20bar?foo+bar
97
ответ дан 24 November 2019 в 03:04
поделиться

Согласно W3C (и они являются официальным источником по этим вещам), пробел в запросе Строка (и только в строке запроса) может быть закодирована как «% 20 » или « + ». Из раздела «Строки запроса» в разделе «Рекомендации»:

В строке запроса знак «плюс» зарезервирован как сокращенное обозначение для пробела. Следовательно, действительные знаки плюса необходимо кодировать. Этот метод использовался для облегчения передачи URI запросов в системах, в которых не допускались пробелы.

Согласно разделу 3.4 RFC2396 , который является официальной спецификацией URI в целом, компонент «запроса» является Зависит от URL:

3.4. Компонент запроса компонент зависит от URL:

3.4. Компонент запроса компонент зависит от URL:

3.4. Компонент запроса Компонент запроса - это строка информации, которую должен интерпретировать ресурс.

  query = * uric

Внутри компонента запроса символы ";", "/", "?", ":", "@", "&", "=", "+", "," и "$" зарезервированы.

Следовательно, это ошибка в другом программном обеспечении, если оно не принимает URL-адреса с пробелами в строке запроса, закодированной как " + "символов.

Что касается третьей части вашего вопроса, один способ (хотя и немного уродливый) исправить вывод из URLEncoder.encode () - это затем ] call replaceAll ("\\ +", "% 20") для возвращаемого значения.

48
ответ дан 24 November 2019 в 03:04
поделиться

Это не должно иметь значения, как если бы вы закодировали письмо A as% 41.

Однако, если вы имеете дело с системой, которая не распознает одну форму, кажется, что вам просто придется дать ей то, что она ожидает, независимо от того, что говорится в «спецификации» .

6
ответ дан 24 November 2019 в 03:04
поделиться

Вы можете использовать и то, и другое - что означает, что большинство людей выбирают «+», поскольку он более удобочитаемый.

5
ответ дан 24 November 2019 в 03:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: