2

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を次に示します。

4

1 に答える 1

1

正規表現を使用して、2 つの区切り文字で分割できます。

var s = qs.split(/[&;]/)

これは & と ; の両方を含む文字列を処理します。

編集:

これは、キャラクターの最初の出現を考慮して、どちらかに分割する投稿です。URL に最初にセミコロンが含まれていることを願っていますが、; の出現をチェックする方が安全かもしれません。存在する場合はそれを区切り文字として使用するだけです。

RFC3986によると、URI 予約文字をどのように使用するかを決定するのは、スキームの実装者次第です。また、 RFC 1738によると、セミコロンは URI の検索部分の予約文字であり、エンコードされていない限り、存在する場合は区切り文字として扱われますアンパサンドをエスケープする必要があるため、どちらかを使用する必要があります。

私はあなたの例を勇敢にします

index.php?Param1=value&Param2=value;Param3=value

なので

["Param1=value&Param2=value","Param3=value"]
于 2013-02-11T20:09:51.007 に答える