Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Можно ли в URL-адресе содержать пробел?

Автор вопроса: Joe CasadonteОтветов: 10

Разрешено ли URI (в частности, URL-адрес HTTP) содержать один или несколько пробелов? Если URL-адрес необходимо закодировать, является ли + просто общепринятым соглашением или законной альтернативой?

В частности, может ли кто-нибудь указать на RFC, который указывает, что URL-адрес с пробелом должен быть закодирован?

Мотивация для вопроса: Во время бета-тестирования веб-сайта я заметил, что некоторые URL-адреса были созданы с пробелами. Казалось, Firefox поступил правильно, что меня удивило! Но я хотел указать разработчикам на RFC, чтобы они почувствовали необходимость исправить эти URL-адреса.

  • надмножество, появившееся позже: каковы все недопустимые символы: stackoverflow.com/questions/1547899/ Ciro Santilli 新疆再教育营六四事件&#x6CD 29.08.2014
  • По теме: Должны ли пробелы в URL кодироваться с использованием% 20 или +? DavidRR 17.09.2014

httpurlhtmlencoding

Ответы

Ответ 1 · рейтинг 107 · Marc Novakowski

Согласно RFC 1738:

Небезопасно:

Персонажи могут быть небезопасными по ряду причин. Пробел небезопасен, поскольку значимые пробелы могут исчезнуть, а незначащие пробелы могут появиться, когда URL-адреса транскрибируются, набираются или обрабатываются программами обработки текста. Символы "<" и ">" небезопасны, потому что они используется в качестве разделителей URL-адресов в произвольном тексте; кавычки (""") используются для разграничения URL-адресов в некоторых системах. Символ "#" небезопасен и всегда должен кодироваться, поскольку он используется во всемирной паутине и в других системах для отделения URL-адреса от идентификатора фрагмента / привязки, который может следовать за ним. Символ "%" небезопасен, потому что он используется для кодирования других символов. Другие символы небезопасны, поскольку известно, что шлюзы и другие транспортные агенты иногда изменяют такие символы. Это символы "{", "}", "|", "\", "^", "~", "[", "]" и "`".

Все небезопасные символы всегда должны кодироваться в URL. Например, символ "#" должен быть закодирован в URL-адресах даже в системах, которые обычно не работают с идентификаторами фрагментов или привязок, поэтому, если URL-адрес копируется в другую систему, которая их использует, не нужно будет изменять кодировку URL-адреса. .

Ответ 2 · рейтинг 44 · Julien

Почему его нужно кодировать? Запрос выглядит так:

GET /url HTTP/1.1
(Ignoring headers)

Есть 3 поля, разделенных пробелом. Если вы поместите пробел в свой URL:

GET /url end_url HTTP/1.1

Вы знаете, что у вас есть 4 поля, HTTP-сервер сообщит вам, что это недействительный запрос.

GET /url%20end_url HTTP/1.1

3 поля => действительно

Примечание: в строке запроса (после?) Пробел обычно кодируется как +

GET /url?var=foo+bar HTTP/1.1

скорее, чем

GET /url?var=foo%20bar HTTP/1.1

Ответ 3 · рейтинг 41 · Peter Hilton

Короче ответ: нет, вы должны кодировать пробел; правильно кодировать пробел как +, но только в строке запроса; в пути вы должны использовать %20.

Ответ 4 · рейтинг 9 · Rob Williams

URL-адреса определены в RFC 3986, хотя другие RFC также актуальны, но RFC 1738 устарел.

В них может не быть пробелов, как и многих других символов. Поскольку эти запрещенные символы часто нужно каким-то образом представлять, существует схема их кодирования в URL-адрес путем перевода их в их шестнадцатеричный эквивалент ASCII с префиксом "%".

Большинство языков / платформ программирования предоставляют функции для кодирования и декодирования URL-адресов, хотя они могут не соответствовать стандартам RFC. Например, я знаю, что PHP этого не делает.

Ответ 5 · рейтинг 7 · user54650

Да, пробел обычно кодируется как "% 20". Любые параметры, которые передаются в URL, должны быть закодированы просто из соображений безопасности.

Ответ 6 · рейтинг 6 · A.M Web Surfer

URL-адрес может содержать пробел, и в большинстве браузеров они будут отображаться как% 20, но правила кодирования браузера меняются довольно часто, и мы не можем зависеть от того, как браузер будет отображать URL-адрес.

Так что вместо этого вы можете заменить пробел в URL-адресе любым символом, который, по вашему мнению, сделает URL-адрес более читабельным и "красивым";) ..... О, поэтому предпочтительными общими символами являются "-", "_", "+" .... но это не принуждение, поэтому вы можете использовать любой символ, который не должен быть в URL-адресе.

Избегайте использования%, &,}, {,], [, /,>, ‹в качестве замены символа пространства URL-адреса, поскольку они могут вызывать ошибку в определенных браузерах и платформах.

Как вы можете видеть, переполнение Stak использует символ "-" в качестве замены пробела (% 20).

Удачных вопросов.

Ответ 7 · рейтинг 5 · Chris Ballance

В URL-адресах не должно быть пробелов . Если вам нужно обратиться к одному из них, используйте его закодированное значение %20

Ответ 8 · рейтинг 5 · Julian Reschke

Может ли кто-нибудь указать на RFC, указывающий, что URL-адрес с пробелом должен быть закодирован?

URI и, следовательно, URL-адреса определены в RFC 3986.

Если вы посмотрите на определенную там грамматику, вы в конечном итоге заметите, что символ пробела никогда не может быть частью синтаксически допустимого URL-адреса, поэтому термин "URL-адрес с пробелом" сам по себе противоречит.

Ответ 9 · рейтинг 3 · Eric Schoonover

Чтобы ответить на ваш вопрос. Я бы сказал, что приложения довольно часто заменяют пробелы в значениях, которые будут использоваться в URL-адресах. Причина этого обычно заключается в том, чтобы избежать сложного для чтения процентного кодирования (URI).

Прочтите эту статью в Википедии о процентном кодировании.

Ответ 10 · Sophie Alpert

Firefox 3 будет отображать %20s в URL-адресах как пробелы в адресной строке.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы