2

目標は、URLのハッシュ部分に埋め込まれている引数を解析することです。StackOverflowコミュニティの誰かが、同様の質問への回答として次のコードを提供しました。コミュニティはこのコードを適切な回答として選択したため、次のように私自身のコードに統合されました。

Utils.parseQueryStringArgs=function(queryString){
    var result = {}, queryString = queryString.substring(1),
        re = /([^&=]+)=([^&]*)/g, m;

    while (m = re.exec(queryString)) {
            result[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);
    }

    return result;
}

正規表現の知識がないので、上記の「re」変数は私には無意味ですが、それでもコードの構造は理にかなっています。次の式で窒息するまで、問題なく機能しました。

friendlySeriesName=Test%3A%20Fund.Feeder%20[class%20A]%20%26gt%3B%26gt%3B%20Morgan%2C%20Harry%20%40%201

予想される動作は、「friendlySeriesName」のプロパティ名と「TestFund.Feeder [class A] >> Morgan、Harry@1」のプロパティ値を解析することです。ただし、何が起こっているのかは、プロパティ名の適切な解析と、解析された「Test:Fund.Feeder[クラスA]」の値です。大なり記号(>>>")を超えるものはすべて、この解析関数によって削除されます。

質問:変数're'の値を変更して、上記の関数が提供されたサンプル式で適切に機能するようにするか、またはエンコードされたurl文字列のハッシュからキーと値のペアを解析する確実な方法を提供できますか? ?

4

1 に答える 1

5

問題はJavaScriptコードではありません。問題は、クエリ文字列で提供される値です。

どこかのコードは>> 最初に(つまり、HTML文字エンティティとして)エンコードし、次にURIをエスケープしてアンパサンドとセミコロンを残し%26gt%3bます。ドー!

FWIW、簡単な「ハック」の1つは、最初に(または)に変換する%26gt%3bこと%3eです>

// original stuff
var result = {}, queryString = queryString.substring(1),
    re = /([^&=]+)=([^&]*)/g, m;
// hack
queryString = queryString.replace(/%26gt%3b/g, "%3e");
// rest as normal

<これは、他の問題のある初期エンコーディング( as&lt;&asなど)でも実行する必要がある場合があり&amp;ます。

于 2012-12-01T18:57:49.873 に答える