Javascript 如何将查询字符串从HTML表单解析为键值对字符串?

Javascript 如何将查询字符串从HTML表单解析为键值对字符串?,javascript,jquery,html,forms,Javascript,Jquery,Html,Forms,在我开发的一个web应用程序中,我需要序列化表单,然后将查询字符串拆分为键值对,如下所述 var frmSerialized=$(frm).serialize().replace(/\+/g,'%20'); //The jquery libraries upto version 2.0 converts spaces to plus var frmKeyPair=decodeURIComponent(frmSerialized).split("&"); 在我找

在我开发的一个web应用程序中,我需要序列化表单,然后将查询字符串拆分为键值对,如下所述

    var frmSerialized=$(frm).serialize().replace(/\+/g,'%20');      //The jquery libraries upto version 2.0 converts spaces to plus
    var frmKeyPair=decodeURIComponent(frmSerialized).split("&");
在我找到两个箱子之前,一切都很顺利:

  • 当其中一个表单元素的值包含“&”时。比如说

  • 当其中一个表单元素的值包含“?”时。比如说

  • 表单序列化和拆分过程在这些情况下失败。在序列化然后拆分查询字符串时,有什么更好的选择

    编辑:此操作的主要目的是加密参数,防止web参数被篡改。所以我实际上做的是:

    for(var j=0;j<frmKeyPair.length;j++){
            var mapInput;
            var element=frmKeyPair[j].split("=");
            var elemName=decodeURIComponent(element[0]);
            var eleValue=decodeURIComponent(element[1]);
            mapInput = document.createElement("input");
            mapInput.type = "hidden";
            mapInput.name = aesUtil.encrypt(salt, iv, passPhrase, elemName);
            mapInput.value = eleValue==null?"":aesUtil.encrypt(salt, iv, passPhrase, eleValue);
            mapForm.appendChild(mapInput);
        }
    

    您可以通过拆分&来获得它们的键值对,然后在解码值之前通过“=”来拆分它们

    var x=$('form').serialize().replace(/\+/g,'%20');
    控制台日志(x);
    x、 拆分('&').forEach(函数(keyValue){
    var[key,value]=keyValue.split('=');
    log(键“=”,decodeURIComponent(值));
    });
    
    
    
    mapForm.submit();