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