php如何解析url参数?

时间:2017-08-02 14:49:28

标签: php null isset

我有一个网址

www.example.com?para1=&para2=2

我试着判断para1和para2;

isset($_GET['para1'] )       // true
 isset($_GET['para2'])       //true;
 isset($_GET['para3'])       // false

我认为isset($_GET['para1'] )是假的,但似乎没有。

我的问题:

为什么isset($_GET['para1'] )是真的。它如何解析php中的url?

6 个答案:

答案 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)

Documentation

  

确定变量是否为空。变量是   如果它不存在或者其值等于FALSE则视为空   如果变量不存在,empty()不会生成警告。

答案 3 :(得分:0)

isset()返回true,因为它在您的请求中设置,但是为空字符串。

您想使用!empty()

在您的请求中www.example.com?para1=&para2=2

para1=nullpara2=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)