1

我正在为我的 url 构建一个查询字符串,并且需要从编码中排除某些字符。

我想排除“&”和“=”,以便我可以这样声明:

first=blah&second=blah 以此类推....

我想最好的表达方式是如何阻止它们被编码?

一些代码:

 else if (array[i].nodeName == "SELECT") {
   if (array[i].id == "multiple") {
     var selected = $.map($('#multiple option:selected'),

     function (e) {
       return $(e).val();
     });
     $.each(selected, function (index, value) {
       name = array[i].name;
       values += app + "\&" + key + "=";
     });

   } else {
     name = arr[i].name;
     values = arr[i].value;
   }
 }

 key = encodeURIComponent(name);
 value = encodeURIComponent(values);
 queryString += name + "=" + values + "&";
4

2 回答 2

1

有没有办法排除某些字符encodeURIComponent

不,这是一个只接受一个参数的内置函数。


&当它出现在键或值的中间时,您确实需要进行编码,因此最简单的解决方案是在组合它们之前对各个名称和值进行编码。定义

function emit(name, value) {
  queryString += (queryString.indexOf("?") >= 0 ? "&" : "?")
    + encodeURIComponent(name) + "=" + encodeURIComponent(value);
}

然后在多个选择中为每个名称/值对调用该函数,或者为每个其他检查的输入调用一次。

else if (array[i].nodeName=="SELECT" ){
  if(array[i].id == "multiple"){
    var selected = $.map( $('#multiple option:selected'),
                          function(e){return $(e).val();});
    $.each(selected, function(index, value){
             emit(array[i].name, value);
           });
  } else {
    emit(arr[i].name, arr[i].value);
  }
}

使用encodeURI或类似方法将无法正确编码#=其他必要的代码点。

于 2012-07-12T17:27:27.810 回答
0

函数的名称应该表明它应该如何使用:在查询字符串的片段上调用它,而不是整个查询字符串。

编辑-我尝试根据您的代码创建一个示例,但我无法弄清楚它要做什么。就目前而言,它似乎有语法错误。

于 2012-07-12T17:27:14.510 回答