Javascript でクエリ文字列を解析する高速な方法について言及している StackOverflow に関する記事をたくさん見つけましたが、見つけられなかったのは、 と の両方&
を;
区切り文字として処理する方法です。
ここで、クエリ文字列の区切り文字として設定されるのはそのうちの 1 つだけだと思います。たとえば、次のクエリ文字列を考えてみましょう。
index.php?Param1=value&Param2=value;Param3=value
区切り文字はどれ?
- そうですか
&
、そう;
ですか。 - それは最初に認識された区切り文字ですか、それとも
&
よりも優先され;
ますか? - 両方とも区切り記号として扱われ、例の 3 つのパラメーターはすべて解析されますか?
Javascript では、歴史的に次の関数を使用してきました。
/**
* Gets the value of a parameter from a URI.
* @param href The full URI to search. Must at least start with a ? query string delimiter.
* @param key The key of the param for which to retrieve the value.
* @param def A default value to return in the case that the key cannot be found in the query string.
* @return The value of the param if the key is found, otherwise returns def.
*/
function getURIParam(href, key, def) {
if (arguments.length == 2) def = null;
var qs = href.substring(href.indexOf('?') + 1);
var s = qs.split('&');
for (var k in s) {
var s2 = s[k].split('=');
if (s2[0] == key)
return decodeURIComponent(s2[1]);
}
return def;
}
に基づいて各キーと値のペアを分割するだけ&
です。区切り文字が常に である限り、うまく機能します&
。ただし、ご存知のように、RFC で許可されているため、常にそうであるとは限らず、強制する必要もありません;
。
と の両方&
を;
区切り文字として処理するには、まず を検索し、indexOf("&")
見つからない場合は区切り文字を に設定する必要があり;
ますか?
&
区切り文字がまたはのいずれかであるという規則に基づいて URL を解析する適切な方法は何;
ですか?
と の両方を処理できるサーバーに関するW3C勧告を次に示します。&
;
HTTP サーバーの実装者、特に CGI の実装者は、";" の使用をサポートすることをお勧めします。"&" の代わりに、このように "&" 文字をエスケープする手間を省きます。
URI を定義するRFC 1738を次に示します。