Сегодня я наткнулся на следующий 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.
url
parsing
query-parameters
Bungle
источник
источник
indexOf()
чтобы найти вопросительный знак, поэтому он взял позицию первого появления. Затем я разделяю query_parameters на каждую,&
а затем их пары имя / значение для каждой=
.Ответы:
Да, это действительно так. Значение имеет только первое
?
в URL-адресе, все после него рассматриваются как буквальные вопросительные знаки:...
http://tools.ietf.org/html/rfc3986#section-3.4
источник
?blogid
. На самом деле это кажется несущественным параметром, т.е. страница обслуживается одинаково, с любым количеством вопросительных знаков или без параметра полностью.В качестве косвенно связанного ответа
foo?spam=1?&eggs=3
дает параметруspam
значение1?
источник
.htaccess
или подобных уловок. если мы изменимfoo
наscript.php
и сделаем этот запрос,script.php?spam=1?&eggs=3
тоvar_dump($_GET)
покажетarray(2) { ["spam"]=> string(2) "1?" ["eggs"]=> string(1) "3" }