web-dev-qa-db-ja.com

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なのか、主に興味があります。

83
Bungle

はい、有効です。 URL内のfirst?のみが意味を持ち、それ以降はリテラルの疑問符として扱われます。

クエリコンポーネントは、最初の疑問符( "?")文字で示され、シャープ記号( "#")文字またはURIの末尾で終了します。

...

文字のスラッシュ( "/")および疑問符( "?")は、クエリコンポーネント内のデータを表す場合があります。いくつかの古い誤った実装は、階層参照を検索するときにクエリデータとパスデータを区別できないため、相対参照(セクション5.1)のベースURIとして使用すると、そのようなデータを正しく処理できない可能性があることに注意してください。ただし、クエリコンポーネントは "key = value"ペアの形式で識別情報を運ぶためによく使用され、頻繁に使用される値の1つは別のURIへの参照であるため、これらの文字のパーセントエンコードを回避する方が使いやすい場合があります。

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

98
Amber

接線方向に関連する答えとして、foo?spam=1?&eggs=3はパラメータspamに値1?

22
Hilton Shumway