URLに複数の疑問符を含めることは有効ですか?


91

今日は次の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を分割し、&次にそれぞれで名前と値のペアを分割してい=ます。
バングル

回答:


107

はい、有効です。URL の最初の ?文字だけが意味を持ち、それ以降は文字通り疑問符として扱われます。

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

...

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

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


9
それでは、最初のクエリパラメータの名前が「?blogid」ではなく「?blogid」になるということですか。それは楽しいかもしれません...
GalacticCowboy

3
@GalacticCowboy-ええ、同じことがちょうど私に起こりました。正解です。Firebugは、最初のクエリパラメータが実際にあることを確認します?blogid。これは実際には必須ではないパラメーターのように見えます。つまり、ページには同じ数の疑問符が含まれるか、パラメーターが完全に省略されて同じように表示されます。
Bungle、

26

接線的に関連する答えとして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" }
Hebe
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.