Php 在具有多个select的窗体上更改$\u GET字符串

Php 在具有多个select的窗体上更改$\u GET字符串,php,forms,select,get,Php,Forms,Select,Get,我有一个包含多个选择的表单,提交表单时得到的url如下所示: <form action="" method="get"> <select name="var1" multiple="multiple"> <option value="var1">one</option> <option value="var2">two</option> <option valu

我有一个包含多个选择的表单,提交表单时得到的url如下所示:

<form action="" method="get"> 
    <select name="var1" multiple="multiple">
        <option value="var1">one</option>
        <option value="var2">two</option>
        <option value="var3">three</option>
        <option value="var4">four</option>
        <option value="var5">five</option>
    </select>
    <select name="var2" multiple="multiple">
        <option value="var1">one</option>
        <option value="var2">two</option>
        <option value="var3">three</option>
        <option value="var4">four</option>
        <option value="var5">five</option>
    </select>
    <input type="submit" value="Send" />
</form>
tld.com/?var1=opt1$var1=opt2&var1=opt3&var2=opt1&var2=opt2

我想获得的url是:

tld.com/?var1=opt+opt2+opt3&var2=opt1+opt2

我不想对存储在数组中的选项使用$\u POST方法,因为我希望url对于任何自定义搜索都是唯一的

该表单如下所示:

<form action="" method="get"> 
    <select name="var1" multiple="multiple">
        <option value="var1">one</option>
        <option value="var2">two</option>
        <option value="var3">three</option>
        <option value="var4">four</option>
        <option value="var5">five</option>
    </select>
    <select name="var2" multiple="multiple">
        <option value="var1">one</option>
        <option value="var2">two</option>
        <option value="var3">three</option>
        <option value="var4">four</option>
        <option value="var5">five</option>
    </select>
    <input type="submit" value="Send" />
</form>

一
二
三
四
五
一
二
三
四
五

您可以尝试在客户端构建2个数组,并通过表单发布,但在服务器端,您将获得2个数组,并使用它们进行配对。你真的需要它吗

大概是

$("#myForm").submit(function(){
var myKeys = new Array();
var myValues = new Array();
$("#myForm input").each(function(n,element){
    myKeys[] = $(element).attr("name");
    myValues[] = $(element).val();
});
$("#hiddenInput").attr("name", myKeys.join('+'));
$("#hiddenInput").attr("value", myValues.join('+'));
return true;
});
您将获得URL
?name1+name2+name3=value1+value2+value3

UPD:只需在名称属性中使用
[]

<input name="var1[]" value="param1">
<input name="var1[]" value="param2">


您将获得
/?var1=param1+param2

为什么foo=1+2+3而不是标准的foo=1&foo=2&foo=3?我没有访问处理url变量的脚本的权限。。。我只能访问必须生成url的表单。对于多个参数,结构需要为?foo=1+2+3values@Quentin因为这是标记为PHP的,所以语法是
foo[]=1&foo[]=2&foo[]=3
您可以选择提供键:
foo[bar]=1&foo[baz]=2
。PHP透明地将其转换为数组结构。输入字段如下所示:
。我强烈建议您访问该脚本,或者告诉有权访问该脚本的人修复它。解析标准表单数据结构将比尝试让表单以非标准方式发送数据更容易、更健壮。可能我不够清楚,或者可能是变量的值让你感到困惑。我需要返回的url将一个变量的值连接在一起。因此,如果在一个选择下我选择了值一和值二,url现在是?foo=one&foo=two,我需要它是?foo=one+two,所以只有变量的值必须连接在一起,名称需要保持分开