Dzisiaj trafiłem na następujący adres URL:
http://www.sfgate.com/cgi-bin/blogs/inmarin/detail??blogid=122&entry_id=64497
Zwróć uwagę na podwójny znak zapytania na początku ciągu zapytania:
??blogid=122&entry_id=64497
Wydawało się, że moja przeglądarka nie ma z tym żadnych problemów i uruchomiła szybką zakładkę:
javascript:alert(document.location.search);
właśnie podał mi ciąg zapytania pokazany powyżej.
Czy to jest prawidłowy adres URL? Powodem, dla którego jestem tak pedantyczny (zakładając, że jestem), jest to, że muszę analizować takie adresy URL pod kątem parametrów zapytania, a obsługa podwójnych znaków zapytania wymagałaby pewnych zmian w moim kodzie. Oczywiście, jeśli są na wolności, będę musiał ich wspierać; Jestem głównie ciekawy, czy to moja wina, że nie przestrzegam dokładnie standardów adresów URL, czy w rzeczywistości jest to niestandardowy adres URL.
url
parsing
query-parameters
Klecić
źródło
źródło
indexOf()
do zlokalizowania znaku zapytania, więc podniosło pozycję pierwszego wystąpienia. Następnie dzielę parametry query_parameters na każdym,&
a następnie ich pary nazwa / wartość na każdym=
.Odpowiedzi:
Tak, to jest ważne. Tylko pierwszy
?
adres w adresie URL ma znaczenie, wszystkie po nim są traktowane jako dosłowne znaki zapytania:...
http://tools.ietf.org/html/rfc3986#section-3.4
źródło
?blogid
. Wydaje się, że jest to nieistotny parametr, tj. Strona jest obsługiwana tak samo z dowolną liczbą znaków zapytania lub całkowicie pomijana.Jako odpowiedź powiązaną stycznie
foo?spam=1?&eggs=3
podaje parametrowispam
wartość1?
źródło
.htaccess
lub podobnych sztuczek. jeśli zmienimyfoo
nascript.php
i wyślemy tę prośbę,script.php?spam=1?&eggs=3
wtedyvar_dump($_GET)
pokaże sięarray(2) { ["spam"]=> string(2) "1?" ["eggs"]=> string(1) "3" }