有没有办法阻止GET方法表单发送空变量?

时间:2012-04-08 21:12:21

标签: php html forms

我在WordPress安装中使用以下表单作为高级搜索页面的一部分。

<form action="/advanced-search/" method="get">

表单工作正常,但生成的网址如下:

/advanced-search/page/3/?act=s&f=cichlidae&g&s&c&r&tmin&tmax&hmin&hmax&pHmin&pHmax&cmin&cmax&sF&sM&aL&aD&aH

有没有办法阻止表单发送那些空变量?在上面的示例中,仅搜索f(值cichlidae)。因此我更喜欢它生成这样的URL:

/advanced-search/?act=s&f=cichlidae(如有必要,加上/page/3/。)

我无法使用$_POST因为我无法使用WordPress paged变量来处理$_POST值。

提前致谢,

3 个答案:

答案 0 :(得分:2)

为什么不使用jQuery的serialize方法收集字符串中的所有表单值?

$('form').submit(function() {
   var string = $(this).serialize();
   window.location.href = '/advanced-search/'+string;
});

它循环遍历所有表单元素,收集它们的值并将其转换为可读的字符串格式,以便在URL中使用。

答案 1 :(得分:1)

不是内置于表单,否 - 如果该字段存在,则会被发送。

您可以使用Javascript来提交表单,从而省略空字段。

答案 2 :(得分:1)

不,没有办法(没有JavaScript)。如果有,这将是浏览器特定的,因为它是决定如何处理表单数据的浏览器。

另外,这个:

foo.php?a=

......而且这个:

foo.php

...在语义上是不同的。在前者中,a传递的是空字符串(""),而后者a根本没有传递(null)。

此外,Wordpress在这里是正确的,因为表单是一个搜索表单,因此它是检索数据,应该使用GET;而不是创建数据,POST应该这样做。

更改此方法(不使用JavaScript)的方法是使用网关脚本从网址中删除空参数并重定向。

每个例子:

$newGET = array();
foreach ($_GET as $key => $value) {
    if ($value !== '') $newGET[$key] = $value;
}

header('Location: some/url?'.http_build_query($newGET));
exit;