のようhttp://example.com/foo?bar
なURLは有効ですか?
私は何らかの方法で言っている何かへのリンクを探しています。単純な「はい/いいえ」の回答または事例証拠ではそれを切りません。
のようhttp://example.com/foo?bar
なURLは有効ですか?
私は何らかの方法で言っている何かへのリンクを探しています。単純な「はい/いいえ」の回答または事例証拠ではそれを切りません。
回答:
URI RFCは、クエリ文字列の形式を規定していません。クエリ文字列には名前と値のペアが含まれることが多いと認識されていますが、必須ではありません(たとえば、別のURIが含まれている場合が多い)。
3.4。クエリ
クエリコンポーネントには、パスコンポーネント(セクション3.3)のデータと共に非URIデータが含まれており、URIのスキームと命名機関(存在する場合)のスコープ内でリソースを識別するのに役立ちます。...
...ただし、クエリコンポーネントは「key = value」ペアの形式で識別情報を運ぶためによく使用され、頻繁に使用される値の1つは別のURIへの参照です...
HTMLは、HTTP GETを介して送信されたフォームがフォーム値を "?key1 = value1&key2 = value2 ..."(適切にエンコードされた)形式の名前と値のペアとしてエンコードする必要があることを確立します。クエリ文字列の解析は、サーバー側のコード(Javaサーブレットエンジンなど)に依存します。
使用しているサーバー側フレームワークがあるかどうかは特定しませんが、サーバー側フレームワークがクエリ文字列が常に名前と値のペアであると想定し、それ以外のクエリ文字列を詰まらせる可能性がありますその形式(例:)?bar
。独自のカスタムコードでクエリ文字列を解析する場合は、そのクエリ文字列の形式を確実に処理する必要があります。フレームワークの場合は、ドキュメントを参照するか、単にテストして、その処理方法を確認する必要があります。
それらは完全に有効です。それらは、暴徒のメッセンジャーの後ろに静かに立っている大きな筋肉質の男に相当すると考えることができます。その男には名前がなく、話しませんが、彼の単なる存在は情報を伝えます。
「「http」スキームは、HTTPプロトコルを介してネットワークリソースを検索するために使用されます。このセクションでは、http URLのスキーム固有の構文とセマンティクスを定義します。」http://www.w3.org/Protocols/rfc2616/rfc2616.html
http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]
だから、はい、疑問符の後は何でも有効です。サーバーの解釈は異なる場合がありますが、事例によっては、一部の言語ではそれがブール値として扱われ、リストされている場合はtrueであることがわかります。
URI仕様の唯一の関連部分は、最初と最初の間のすべてがクエリの仕様の定義に適合することを知ることです。のような任意の文字を含めることができます。これは、またはなどのクエリ文字列が有効であることを意味します。?
#
[:/.?]
?bar
?ten+green+apples
ここでRFC 3986を見つけてください
isindex
意味のあるHTML5ではありません。
フォームの最初の要素としての使用のみが非推奨で、名前なしで送信されます。
エントリの名前が「isindex」で、タイプが「text」で、これがフォームデータセットの最初のエントリである場合、結果に値を追加し、このエントリの残りのサブステップをスキップして、次へ進みますエントリがある場合はエントリ、そうでない場合はアルゴリズム全体の次のステップ。
isindexフラグは、従来の使用のみを目的としています。準拠するHTMLドキュメントのフォームは、このフラグを設定してデコードする必要があるペイロードを生成しません。
isindexが最後にサポートされたのはHTML3でした。HTML5での使用は、下位互換性を容易にするためです。
この形式のURIに対するライブラリでのサポートはさまざまですが、一部のライブラリは、を簡単に使用できるようにレガシーサポートを提供していますisindex
。
PerlのURIなどの一部のライブラリは、この種の構造を解析するメソッドを提供します
$uri->query_keywords
$uri->query_keywords( $keywords, ... )
$uri->query_keywords( \@keywords )
Sets and returns query components that use the keywords separated by "+" format.
url
(特別なサポートなし)別のはるかに頻繁な例として、node.js
通常のルートをとり、どちらかとして解析を容易にします
parseQueryString
)他のほとんどのURI解析APIは、これに類似したものに従います。
parse_url
、同様の実装に従いますが、クエリの文字列のみを返します。オブジェクトに解析するk=>v
必要がありparse_string()
isindex
name
HTML5の非推奨のマジック
この非推奨の機能により、フォームの送信でそのようなURLを生成できるようになり、HTMLで有効であることをさらに証明できます。例えば:
<form action="#isindex" class="border" id="isindex" method="get">
<input type="text" name="isindex" value="bar"/>
<button type="submit">Submit</button>
</form>
次のタイプのURLを生成します。
?bar
標準:https : //www.w3.org/TR/html5/forms.html#naming-form-controls : -the-name-attribute
isindex
ただし、https://stackoverflow.com/a/41689431/895245で言及されているように非推奨です。
他のすべての回答が説明したように、チェック、特にブール型のものには完全に有効です
次に、名前でクエリ文字列を取得する簡単な関数を示します。
function getParameterByName(name, url) {
if (!url) {
url = window.location.href;
}
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
次に、探しているクエリ文字列が存在するかどうかを確認するには、次のような簡単なことを行います。
var exampleQueryString = (getParameterByName('exampleQueryString') != null);
これexampleQueryString
はfalse
、関数がクエリ文字列を見つけられない場合に発生しますtrue
。それ以外の場合はになります。