PHP filter_input():当 $_GET[“var”] 设置为空时不应用默认值


PHP filter_input(): doesn't apply default value when $_GET["var"] is set but empty

PHP filter_input() 在输入存在但为空时不返回其默认值

让我假设我们有一个包含此 php 代码的页面。

<?php
$keyword = filter_input(INPUT_GET, 'keyword', FILTER_DEFAULT, array("options" => array(
    "default" => "default_value"
)));
echo $keyword;  
  1. 当我使用此具有参数和值的 URL 打开此页面时keyword;

http://example.com/?keyword=abc

它会返回

abc
  1. 当我打开只有keyword参数的 URL 的页面时;

http://example.com/?keyword=

它会返回

// nothing returned

我希望default_value能回来。

你知道吗?

使用FILTER_DEFAULT过滤器,没有可用的选项(请参阅 http://php.net/manual/en/filter.filters.sanitize.php 的FILTER_UNSAFE_RAW)。

否则FILTER_DEFAULT不会过滤任何内容,因此对于您当前的情况,您最好只执行以下操作:

$keyword = $_GET['keyword'] ? $_GET['keyword'] : 'default_value';

另一方面,如果您仍想使用filter_input()另一种简单的默认替代方案是:

$keyword = filter_input(INPUT_GET, 'keyword', FILTER_DEFAULT);
$keyword = $keyword ? $keyword : 'default_value';

这里发生的事情是只有keyword用作过滤器,因此它不会向您显示其他任何内容。

如果keyword=在它的位置,它会显示默认值。

因此,最好使用三元运算符并检查 GET 数组是否为空。

对此的部分解决方案,并使用您当前的代码将是并使用条件!empty()(不为空):

<?php
$keyword = filter_input(INPUT_GET, 'keyword', FILTER_DEFAULT, array("options" => array(
    "default" => "default_value"
)));
if(!empty($keyword)){
   echo $keyword;
}
else{
   echo "The array is empty.";
}

或作为三元运算符:

<?php
$keyword = filter_input(INPUT_GET, 'keyword', FILTER_DEFAULT, array("options" => array(
    "default" => "default_value"
)));
echo $keyword = $keyword ? $keyword : "default_value";

旁注:echo $keyword = ...是有效的语法。它同时回显和分配。