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”和属性值“Test Fund.Feeder [class A] >> Morgan, Harry @ 1”。然而,正在发生的是对属性名称的正确解析和“Test: Fund.Feeder [class A]”的解析值。此解析函数将删除大于号 (">>") 之外的所有内容。

问题:您能否修改变量“re”的值,以使上述函数在提供的示例表达式上正常工作,或者提供一种万无一失的方法来从编码的 url 字符串的哈希中解析出键值对?

4

1 回答 1

5

问题不在于 JavaScript 代码。问题是查询字符串中提供的值。

某处的某些代码首先>编码(即作为HTML 字符实体),然后 URI 转义 & 符号和分号离开. 嗬!> %26gt%3b

FWIW,一个快速的“hack”是首先转换%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 回答