Разрешено ли URI (в частности, URL-адрес HTTP) содержать один или несколько пробелов? Если URL-адрес должен быть закодирован, это +
просто общепринятое соглашение или законная альтернатива?
В частности, может ли кто-нибудь указать на RFC, в котором указано, что URL-адрес с пробелом должен быть закодирован?
Мотивация для вопроса: во время бета-тестирования веб-сайта я заметил, что некоторые URL-адреса были созданы с пробелами. Казалось, что Firefox поступил правильно, что меня удивило! Но я хотел указать разработчикам на RFC, чтобы они почувствовали необходимость исправить эти URL-адреса.
Ответы:
Согласно RFC 1738 :
источник
Зачем это нужно кодировать? Запрос выглядит так:
Есть 3 поля, разделенных пробелом. Если вы поместите пробел в свой URL:
Вы знаете, что у вас есть 4 поля, HTTP-сервер сообщит вам, что это недействительный запрос.
3 поля => действительно
Примечание: в строке запроса (после?) Пробел обычно кодируется как +
скорее, чем
источник
Короче ответ: нет, вы должны кодировать пробел; это является правильным для кодирования пространства как
+
, но только в строке запроса; в пути, который вы должны использовать%20
.источник
URL-адреса определены в RFC 3986 , хотя другие RFC также актуальны, но RFC 1738 устарел.
В них может не быть пробелов, как и многих других символов. Поскольку эти запрещенные символы часто необходимо каким-то образом представлять, существует схема их кодирования в URL-адрес путем перевода их в их шестнадцатеричный эквивалент ASCII с префиксом «%».
Большинство языков / платформ программирования предоставляют функции для кодирования и декодирования URL-адресов, хотя они могут не соответствовать стандартам RFC. Например, я знаю, что PHP этого не делает.
источник
Да, пробел обычно кодируется как "% 20". Любые параметры, которые передаются в URL, должны быть закодированы просто из соображений безопасности.
источник
URL-адрес может содержать пробел, и в большинстве браузеров они будут отображаться как% 20, но правила кодирования браузера меняются довольно часто, и мы не можем зависеть от того, как браузер будет отображать URL-адрес.
Поэтому вместо этого вы можете заменить пробел в URL-адресе любым символом, который, по вашему мнению, сделает URL-адрес более читабельным и «красивым»;) ..... О, поэтому предпочтительными общими символами являются «-», «_», "+" .... но это не принуждение, поэтому вы можете использовать любой символ, который не должен быть в URL-адресе.
Избегайте использования%, &,}, {,], [, /,>, <в качестве замены символа пробела URL-адреса, так как они могут вызывать ошибку в некоторых браузерах и платформах.
Как видите, переполнение Stak использует символ «-» в качестве замены пробела (% 20).
Удачных вопросов.
источник
В URL не должно быть пробелов. Если вам нужно обратиться к одному из них, используйте его закодированное значение
%20
источник
URI и, следовательно, URL-адреса определены в RFC 3986.
Если вы посмотрите на определенную там грамматику, вы в конечном итоге заметите, что пробел никогда не может быть частью синтаксически допустимого URL-адреса, поэтому термин «URL-адрес с пробелом» сам по себе противоречит.
источник
Ответить на ваш вопрос. Я бы сказал, что приложения довольно часто заменяют пробелы в значениях, которые будут использоваться в URL-адресах. Причина этого обычно заключается в том, чтобы избежать сложного для чтения процентного кодирования (URI).
Посмотрите эту статью в Википедии о процентном кодировании .
источник
Firefox 3 будет отображать
%20
s в URL-адресах как пробелы в адресной строке.источник
"Is a URL allowed to contain a space?"
. Скорее комментарий.