URL에 두 개 이상의 물음표가있는 것이 유효합니까?


92

오늘 다음 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인지 주로 궁금합니다.


다행히도 이에도 불구하고 코드를 변경할 필요가 없었습니다. 나는 indexOf()물음표를 찾기 위해 사용 하고 있었기 때문에 첫 번째 발생 위치를 선택했습니다. 그런 다음 각각에서 query_parameters를 분할 &한 다음 각에서 해당 이름 / 값 쌍을 분할합니다 =.
Bungle

답변:


108

예, 유효합니다. URL 의 첫 번째 항목?의미가 있으며 그 이후의 모든 항목은 리터럴 물음표로 처리됩니다.

쿼리 구성 요소는 첫 번째 물음표 ( "?") 문자로 표시되고 숫자 기호 ( "#") 문자 또는 URI 끝으로 종료됩니다.

...

문자 슬래시 ( "/") 및 물음표 ( "?")는 쿼리 구성 요소 내의 데이터를 나타낼 수 있습니다. 일부 오래되고 잘못된 구현은 계층 적 구분 기호를 찾을 때 경로 데이터와 쿼리 데이터를 구분하지 못하기 때문에 상대 참조 (섹션 5.1)의 기본 URI로 사용될 때 이러한 데이터를 올바르게 처리하지 못할 수 있습니다. 그러나 쿼리 구성 요소는 "키 = 값"쌍의 형태로 식별 정보를 전달하는 데 자주 사용되며 자주 사용되는 값 중 하나는 다른 URI에 대한 참조이므로 이러한 문자를 퍼센트 인코딩하지 않는 것이 유용 할 때가 있습니다.

http://tools.ietf.org/html/rfc3986#section-3.4


9
그렇다면 첫 번째 쿼리 매개 변수의 이름이 "blogid"가 아니라 "? blogid"라는 의미입니까? 재미있을 수 있습니다 ...
GalacticCowboy

3
@GalacticCowboy-그래, 나에게도 같은 일이 일어났다. 맞습니다. Firebug는 첫 번째 쿼리 매개 변수가 사실임을 확인 ?blogid합니다. 실제로는 필수가 아닌 매개 변수 인 것으로 보입니다. 즉, 페이지가 여러 물음표와 함께 동일하게 제공되거나 매개 변수를 완전히 생략합니다.
Bungle

27

접선 적으로 관련된 답으로 foo?spam=1?&eggs=3매개 변수 spam에 값을 제공합니다.1?


예. .htaccess또는 유사한 속임수 가없는 경우 . 우리는 변경하는 경우 fooscript.php이 요청을 script.php?spam=1?&eggs=3다음 var_dump($_GET)array(2) { ["spam"]=> string(2) "1?" ["eggs"]=> string(1) "3" }
헤베
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.