Пробел может быть закодирован только в «+» в части запроса «пары ключ-значение типа содержимого-приложения / x-www-form-urlencoded» URL-адреса. На мой взгляд, это МОЖЕТ, а НЕ ДОЛЖЕН. В остальных URL он кодируется как% 20.
По моему мнению, лучше всегда кодировать пробелы как% 20, а не как "+", даже в части запроса URL, потому что это спецификация HTML (RFC-1866), которая указывает, что пробелы должны быть кодируется как "+" в парах "application / x-www-form-urlencoded" ключ-значение типа содержимого (см. пункт 8.2.1. подпункт 1.)
Этот способ кодирования данных формы также приведен в более поздних спецификациях HTML. Например, посмотрите соответствующие параграфы о application / x-www-form-urlencoded в спецификации HTML 4.01 и т. Д.
Вот пример строки в URL, где спецификация HTML допускает кодирование пробелов в виде плюсов: "http://example.com/over/there?name=foo+bar". Таким образом, только после"? ", Пробелы можно заменить на плюсы . В других в некоторых случаях пробелы должны быть закодированы в% 20. Но так как трудно правильно определить контекст, лучше никогда не кодировать пробелы как "+".
Я бы порекомендовал кодировать в процентах все символы, кроме «незарезервированных», определенных в RFC-3986, p.2.3
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
Реализация зависит от выбранного вами языка программирования.
Если ваш URL содержит национальные символы, сначала закодируйте их в UTF-8, а затем закодируйте в процентах результат.