有没有办法阻止发送空变量的GET方法形式?
我使用以下表单作为WordPress安装的高级搜索页面的一部分。有没有办法阻止发送空变量的GET方法形式?
<form action="/advanced-search/" method="get">
的形式工作正常,但产生像URL:
/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
值一起使用。
由于提前,
你为什么不使用jQuery的serialize
方法收集在一个字符串中的所有表单值?
$('form').submit(function() {
var string = $(this).serialize();
window.location.href = '/advanced-search/'+string;
});
它遍历所有表单元素,收集它们的值并将其转换为可读的字符串格式以用于URL。
没有内置的形式,没有 - 如果该字段存在,它会被发送。
您可以使用Javascript来提交表单,从而省略空字段。
不,没有办法(没有JavaScript)。如果有的话,这将是浏览器特定的,因为它是决定如何处理表单数据的浏览器。
而且,这样的:
foo.php?a=
...这:
foo.php
...在语义上是不同的。在前者中,a
以空字符串传递(""
),而后者a
根本不传递(null
)。
此外,Wordpress在这里是正确的,因为表单是一个搜索表单,因此它是检索数据并应该使用GET
;而不是创建数据为POST
应该做的。
更改此方法(无JavaScript)的一种方法是使用网关脚本,该网关脚本从URL中删除空参数并重定向。
每例如:
$newGET = array();
foreach ($_GET as $key => $value) {
if ($value !== '') $newGET[$key] = $value;
}
header('Location: some/url?'.http_build_query($newGET));
exit;