JavaScript 解析 urlencoded 查询参数

标签 javascript

我在解析 JavaScript 中的 URL 编码查询字符串参数时遇到了一个奇怪的问题。

function getUrlVars() {

    var vars = [], hash;
    alert(window.location.href);
    var hashes = window.location.href.slice(decodeURIComponent(window.location.href).indexOf('?') + 1).split('&');
    alert(decodeURIComponent(window.location.href));
    for (var i = 0; i < hashes.length; i++) {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    }
    return vars;
}

网址:http://domain/approveFile/ApproveFile.aspx?id=DZj9aEoyZ2I%3d

"DZj9aEoyZ2I="是一个base64 URL编码值,但它不能正确解析;它忽略“%3d”。请提出解决方案?

最佳答案

您在拆分 = 之前对各部分进行解码,这意味着 %3d 被视为键值分隔符,结束位于循环内的 hash[2] 中。这似乎是不受欢迎的行为,因此解决方法是在所有 .splits

之后进行 decodeURIComponent <小时/>

尝试将 foo[] 实现为列表功能,类似于您在 php 中找到的功能,发帖以求繁荣..

function getUrlVars() {
    var $_GET = Object.create(null), // for..in safe
        pairs = window.location.search.slice(1).split('&'),
        pair,
        i;
    for (i = 0; i < pairs.length; ++i) {
        pair = pairs[i].split('=');
        if (pair[0].slice(-2) === '[]') {
            pair[0] = pair[0].slice(0, -2);
            pair[0] = decodeURIComponent(pair[0]);
            if (pair[1]) pair[1] = decodeURIComponent(pair[1]); // don't assume this
            if (!(pair[0] in $_GET))
                $_GET[pair[0]] = [];
            else if (!Array.isArray($_GET[pair[0]]))
                $_GET[pair[0]] = [$_GET[pair[0]]];
            $_GET[pair[0]].push(pair[1]);
        } else {
            pair[0] = decodeURIComponent(pair[0]);
            if (pair[1]) pair[1] = decodeURIComponent(pair[1]); // don't assume this
            $_GET[pair[0]] = pair[1];
        }
    }
    return $_GET;
}

URL上使用搜索 ?foo=bar%3d&baz[]=fizz&baz[]=buzz 将给出

getUrlVars(); // {"foo": "bar=", "baz": ["fizz", "buzz"]}

关于JavaScript 解析 urlencoded 查询参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32131161/

相关文章:

javascript - 触发点击嵌入的 PDF

javascript - 使用正则表达式从 JavaScript 中的字符串获取值数组

javascript - 在光标下的元素淡入淡出后触发悬停事件

javascript - 如何让图像适合我的 JavaScript 应用程序?

javascript - 使用 INPUT 标签的 VALUE 属性(及其值)读取 HTML 表单的 innerHTML

javascript - Reactjs检查数据更新

javascript - 在带有 React 的 ES6 中,我可以只解构一个对象一次以便在多个方法中使用吗?

javascript - 如何自定义 MadMimi 嵌入式电子邮件表单?

javascript - 通过 JavaScript 和 browserify 理解 require() 和 module.exports

javascript - 如何从一个流获取在其他流的最后一个事件之后发生的事件