Допустимо ли иметь более одного знака вопроса в URL-адресе?
Сегодня я наткнулся на следующий URL:
http://www.sfgate.com/cgi-bin/blogs/inmarin/detail??blogid=122&entry_id=64497
Обратите внимание на двойной знак вопроса в начале строки запроса:
??blogid=122&entry_id=64497
У моего браузера, похоже, не было проблем с этим, и запустил быстрый букмарклет:
javascript:alert(document.location.search);
просто дал мне строку запроса, показанную выше.
Является ли это допустимым URL? Причина, по которой я так педантичен (предполагая, что я есть), заключается в том, что мне нужно анализировать такие URL-адреса для параметров запроса, а поддержка двойных вопросительных знаков потребует некоторых изменений в моем коде. Очевидно, если они находятся в дикой природе, мне нужно будет их поддержать; Мне в основном интересно, если я ошибаюсь в том, что я не придерживаюсь стандартов URL точно, или если это на самом деле нестандартный URL.
Ответы
Ответ 1
Да, это действительно так. Только первый ?
в URL имеет значение, любое после того, как оно рассматривается как буквальные вопросительные знаки:
Компонент запроса указывается первый вопросительный знак ( "?" ) символа и заканчивается числом знак ( "#" ) или к концу URI.
...
Символы слэш ( "/" ) и вопросительный знак ( "?" ) может представлять данные в компоненте запроса. берегись что некоторые более старые, ошибочные реализации не могут обрабатывать такие данных, когда он используется как базовый URI для относительных ссылок (Раздел 5.1), по-видимому, потому, что они не удается отличить данные запроса от данные пути при поиске иерархические разделители. Однако, поскольку компоненты запроса часто используются для переносить идентифицирующую информацию в форма пар "ключ = значение" и одна часто используемое значение является ссылкой к другому URI, иногда лучше для удобства использования процентное кодирование этих символов.
http://tools.ietf.org/html/rfc3986#section-3.4
Ответ 2
Как касательно связанный ответ, foo?spam=1?&eggs=3
дает параметр spam
значение 1?