我有一个网址
www.example.com?para1=¶2=2
我试图判断第1段和第2段;
isset($_GET['para1'] ) // true
isset($_GET['para2']) //true;
isset($_GET['para3']) // false
我认为isset($_GET['para1'] )
是错误的,但似乎不是。
我的问题 :
为什么isset($_GET['para1'] )
是真的。它如何在 php 中解析网址?
这里的很多人都说$_GET['para1']
的价值是null
但事实并非如此。php.net $_GET 文档上有一条评论,它提供了一个有用的脚本来测试这一点。
给定网址:http://www.example.com?a
您可以使用此脚本测试结果:
<?php
print_r($_GET);
if($_GET["a"] === "") echo "a is an empty stringn";
if($_GET["a"] === false) echo "a is falsen";
if($_GET["a"] === null) echo "a is nulln";
if(isset($_GET["a"])) echo "a is setn";
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()
的比较。
isset($var)
如果定义了变量,则返回true
,而不考虑值(null
除外(。在您的情况下,它已定义但包含一个空字符串。
您需要使用empty($var)
,如果未定义变量并测试实际内容,则不会引发异常。
文档
确定变量是否被视为空。变量是 如果它不存在或其值等于 FALSE,则视为空。
如果变量不存在,empty(( 不会生成警告。
isset($var)
将返回true
,因为参数存在于 url 中,如果您检查其值,您将找到一个空字符串""
。
您还可以使用empty($var)
函数来测试空值,只需注意空值将返回 true 对于以下值:
0, "", [], null, false ---> empty() return true
其他明智的它会返回假
我通常会使用这样的函数获取参数并给它们默认值,如果它们不存在:
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);
尝试编辑功能,希望这个帮助
以下是一些可以帮助您实现所需目标的提示:
-
要检查是否设置了 var,
isset($var)
-
要检查 var 是否设置且不为空,
!empty($var)
-
要检查 var 是否不为空且不是空格,
!empty($var) && !trim($var) == false
isset()
返回 true,因为它在您的请求中设置,但设置为空字符串。
你想使用!empty()
.
在您的请求中www.example.com?para1=¶2=2
para1=null
和para2=2
所以:
if (!empty($_GET['para1'])) {}
该值存在于$_GET
数组中,但他的值为 null,该函数isset
仅在值初始化时才计算,而不是值是否为真值。
如果你想知道值是否真实,你可以将数组索引与==
运算符进行比较,就像这样var_dump($_GET['para1'] == true)