Разрешены ли квадратные скобки в URL-адресах?
Разрешены ли квадратные скобки в URL-адресах?
Я 9X_httpd заметил, что Apache commons HttpClient (3.0.1) выдает исключение 9X_url IOException, однако wget и Firefox принимают 9X_httpd квадратные скобки.
Пример URL:
http://example.com/path/to/file[3].html
Мой HTTP-клиент 9X_apache встречает такие URL-адреса, но я не уверен, следует 9X_http ли исправлять код или выдавать исключение 9X_apache (как оно и должно быть).
Ответ #1
Ответ на вопрос: Разрешены ли квадратные скобки в URL-адресах?
RFC 3986 состояния
Хост, определенный в Интернете Буквальный 9X_syntax адрес протокола, версия 6 [RFC3513] или 9X_square-bracket новее, выделяется заключив литерал IP 9X_square-bracket в квадратные скобки («[» и «]»). Этот это 9X_syntax единственное место, где квадратная скобка в 9X_http URI разрешены символы синтаксис.
Таким 9X_urls образом, вы не должны видеть такие URI в 9X_httpd теории, поскольку они должны поступать в 9X_url закодированном виде.
Ответ #2
Ответ на вопрос: Разрешены ли квадратные скобки в URL-адресах?
Квадратные скобки [
и ]
в URL-адресах не часто 9X_square-bracket поддерживаются.
Замените их на %5B
и %5D
:
-
Следующий пример с использованием 9X_http командной строки основан на
bash
иsed
:url='http://example.com?day=[0-3][0-9]' encoded_url="$( sed 's/\[/%5B/g;s/]/%5D/g' <<< "$url")"
-
Использование 9X_urls Java
URLEncoder.encode(String s, String enc)
-
Использование PHP
rawurlencode()
илиurlencode()
'; ?>
вывод:
или:
'; ?>
-
Используя 9X_url ваш любимый язык программирования ... Пожалуйста, расширите 9X_square-bracket этот ответ, разместив комментарий или отредактировав 9X_square-bracket этот ответ, чтобы добавить функцию, которую 9X_apache вы используете на своем языке программирования 9X_urls ;-)
Дополнительные сведения см. в RFC 3986 с указанием 9X_syntax синтаксиса URL. Приложение A посвящено %-encoding
в строке запроса 9X_http (скобки, принадлежащие к «gen-delims», должны быть %-encoded
).
Ответ #3
Ответ на вопрос: Разрешены ли квадратные скобки в URL-адресах?
Я знаю, что этот вопрос немного устарел, но 9X_square-bracket я просто хотел отметить, что PHP использует 9X_url скобки для передачи массивов в URL.
http://www.example.com/foo.php?bar[]=1&bar[]=2&bar[]=3
В этом 9X_square-bracket случае $_GET['bar']
будет содержать array(1, 2, 3)
.
- Верно, но они все равно должны быть закодированы, если браузер не делает этого автоматически. ...
Ответ #4
Ответ на вопрос: Разрешены ли квадратные скобки в URL-адресах?
Практически единственными символами, которые 9X_syntax не разрешены в именах путей, являются # и 9X_syntax ? поскольку они означают конец пути.
В uri 9X_url rfc будет окончательный ответ:
http://www.ietf.org/rfc/rfc1738.txt
Небезопасно:
Персонажи 9X_httpd могут быть небезопасны по ряду причин. Космос символ 9X_square-bracket небезопасен, так как значительные пробелы 9X_urls могут исчезнуть и незначащие пробелы 9X_syntax могут быть введены, когда URL-адреса транскрибируются 9X_square-bracket или набраны или подвергнуты обработке 9X_apache текстовыми программами. Символы «<» и 9X_http «>» небезопасны, поскольку они используются 9X_syntax в качестве разделители вокруг URL-адресов 9X_apache в свободном тексте; кавычка (""") используется 9X_syntax для разграничить URL-адреса в некоторых 9X_square-bracket системах. Символ "#" небезопасен 9X_http и должен всегда кодироваться, потому 9X_urls что он используется во всемирной паутине 9X_http и в других системы для отделения URL-адреса 9X_http от идентификатора фрагмента/якоря, который 9X_urls может Следуйте за ним. Символ "%" небезопасен, поскольку 9X_httpd он используется для кодировки других 9X_syntax символов. Другие символы небезопасны, потому 9X_syntax что известно, что шлюзы и другие транспортные 9X_urls агенты иногда модифицируют такие персонажи. Это 9X_apache символы «{», «}», «|», «\», «^», «~», "[", "]" и 9X_httpd "`".
Все небезопасные символы всегда 9X_syntax должны быть закодированы в URL-адресе. За например, символ 9X_url "#" должен быть закодирован в 9X_http URL-адресах даже в системы, которые 9X_square-bracket обычно не имеют дело с фрагментом или привязкой идентификаторы, так 9X_apache что если URL-адрес скопирован в другую систему, которая использует 9X_httpd их, нет необходимости менять кодировку URL.
Ответ 9X_urls заключается в том, что они должны быть закодированы 9X_square-bracket в шестнадцатеричном формате, но, зная закон 9X_http Постеля, большинство вещей примет их дословно.
- Все небезопасные символы ДОЛЖНЫ всегда кодироваться в URL. ОБЯЗАТЕЛЬНО, а ...
Ответ #5
Ответ на вопрос: Разрешены ли квадратные скобки в URL-адресах?
Любой браузер или веб-программное обеспечение, которое 9X_square-bracket принимает URL-адреса и не выдает исключения 9X_url при введении специальных символов, почти 9X_httpd гарантированно кодирует специальные символы 9X_http за кулисами. Фигурные скобки, квадратные 9X_apache скобки, пробелы и т. д. имеют специальные 9X_apache закодированные способы их представления, чтобы 9X_apache не создавать конфликтов. Согласно предыдущим 9X_square-bracket ответам, самый безопасный способ справиться 9X_http с ними - это закодировать их в URL-адресе, прежде 9X_syntax чем передавать их чему-то, что попытается 9X_httpd разрешить URL-адрес.
Ответ #6
Ответ на вопрос: Разрешены ли квадратные скобки в URL-адресах?
Для использования общего класса HttpClient 9X_syntax вам нужно изучить класс org.apache.commons.httpclient.util.URIUtil, в 9X_square-bracket частности, метод encode(). Используйте его 9X_http для URI-кодирования URL-адреса, прежде чем 9X_url пытаться его получить.
Ответ #7
Ответ на вопрос: Разрешены ли квадратные скобки в URL-адресах?
Похоже, что StackOverflow их не кодирует:
https://stackoverflow.com/search?q=square+brackets+[url]
9X_square-bracket
- Я считаю, что вы видите, что ваш браузер принимает их в качестве входных данных. Однако, е ...
Ответ #8
Ответ на вопрос: Разрешены ли квадратные скобки в URL-адресах?
Лучше всего кодировать их в URL, так как 9X_urls они явно не поддерживаются на всех веб-серверах. Иногда, даже 9X_httpd когда есть стандарт, не все ему следуют.
Ответ #9
Ответ на вопрос: Разрешены ли квадратные скобки в URL-адресах?
В соответствии с URL specification квадратные скобки не являются 9X_apache допустимыми символами URL.
Вот соответствующие 9X_urls фрагменты:
«Национальные» и «пунктуационные» символы 9X_apache не появляются ни в продукции и поэтому 9X_square-bracket могут не отображаться в URL-адресах.
национальный 9X_http { | } | линия | [ | ] | \ | ^ | ~
знаки 9X_url препинания < | >
Ответ #10
Ответ на вопрос: Разрешены ли квадратные скобки в URL-адресах?
Квадратные скобки считаются небезопасными, но 9X_square-bracket большинство браузеров обрабатывают их правильно. При 9X_url этом квадратные скобки лучше заменить некоторыми 9X_apache другими символами.
-
4
-
3
-
2
-
3
-
2
-
7
-
1
-
5
-
2
-
2
-
2
-
5
-
7
-
4
-
7
-
3
-
5
-
4
-
30
-
2
-
17
-
9
-
4
-
10
-
5
-
3
-
1
-
4
-
6
-
9
-
11
-
3
-
5
-
7
-
4
-
3
-
4
-
5
-
3
-
5
-
3
-
2
-
3
-
6
-
3
-
5
-
9
-
3
-
2
-
4