我有一个网址
www.example.com?para1=¶2=2
我试着判断para1和para2;
isset($_GET['para1'] ) // true
isset($_GET['para2']) //true;
isset($_GET['para3']) // false
我认为isset($_GET['para1'] )
是假的,但似乎没有。
为什么isset($_GET['para1'] )
是真的。它如何解析php中的url?
答案 0 :(得分:2)
这里的很多人都说$_GET['para1']
的价值是null
但事实并非如此。 a comment on the php.net $_GET docs提供了一个有用的脚本来测试它。
根据网址:http://www.example.com?a
您可以使用此脚本测试结果:
<?php
print_r($_GET);
if($_GET["a"] === "") echo "a is an empty string\n";
if($_GET["a"] === false) echo "a is false\n";
if($_GET["a"] === null) echo "a is null\n";
if(isset($_GET["a"])) echo "a is set\n";
if(!empty($_GET["a"])) echo "a is not empty";
?>
</pre>
输出结果为:
a is an empty string
a is set
这是因为没有值的键实际上是一个空字符串 不是 null
所以直接回答你的问题:
尽管para1
没有设置值,但实际上确实如此。该值为空字符串(""
)。即使这个值是假的,它仍然是一个值,因此isset()
返回true。您可以使用!empty()
在空字符串上返回false。查看isset()
empty()
和is_null()
here的比较。
答案 1 :(得分:1)
isset($var)
将返回true
因为参数存在于网址中,如果您检查其值,则会找到一个空字符串""
。
您还可以使用empty($var)
函数来测试空值,只需注意空值将为以下值返回true:
0, "", [], null, false ---> empty() return true
另外,它会返回false
我通常会得到参数,并且如果它们不存在则使用类似这样的函数给它们默认值:
function get($item, $type = 'string', $default = null, $escape = true)
{
if(!isset($_GET[$item])) {
return $default;
}
$output = $_GET[$item];
settype($output, $type);
return $escape ? htmlspecialchars(trim($output)) : $output;
}
echo get('para1');
echo get('name', 'string', '');
echo get('admin', 'bool', false);
尝试编辑你喜欢的功能,希望这个帮助
答案 2 :(得分:1)
isset($var)
将返回true
,无论值是什么(null
除外)。在您的情况下,它已定义但包含空字符串
如果未定义变量并测试实际内容,则需要使用不会引发异常的empty($var)
。
确定变量是否为空。变量是 如果它不存在或者其值等于FALSE则视为空 如果变量不存在,empty()不会生成警告。
答案 3 :(得分:0)
isset()
返回true,因为它在您的请求中设置,但是为空字符串。
您想使用!empty()
。
在您的请求中www.example.com?para1=¶2=2
para1=null
和para2=2
所以:
if (!empty($_GET['para1'])) {}
答案 4 :(得分:0)
以下是一些可以帮助您实现所需目标的技巧:
检查是否设置了var
isset($var)
要检查var是否已设置且不为空,
!empty($var)
要检查var是否为空而不是空格,
!empty($var) && !trim($var) == false
答案 5 :(得分:-1)
该值存在于$_GET
数组中,但其值为null,函数isset
仅在值初始化时进行求值,而不是值是真的。
如果您想知道该值是否真实,可以将数组索引与==
运算符进行比较,如var_dump($_GET['para1'] == true)