2017-08-02 50 views
0

我有一个网址php如何解析url参数?

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'])是true.How解析它在PHP的网址是什么?

+1

参数存在,即使它是空的。测试isset测试后是否为空。 –

+1

'para1'存在一个空值。如果你想查看它是否存在并且不是空的,使用:'empty($ _ GET ['para1'])''。 ' –

+0

url如何解析php?为什么para1存在? –

回答

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

+0

你的回答似乎是正确的,但我不确定。 –

+0

只需运行脚本 – DaveLak

0

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

您想使用!empty()

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

para1=nullpara2=2

所以:

if (!empty($_GET['para1'])) {} 
+0

@MagnusEriksson啊是的,谢谢你,我已经更新了两个使用的答案。 – DrRoach

+0

我已经改变了使用'empty()'而不是'is_null()':)的答案 – DrRoach

+1

然后你可以移除'isset()',因为'empty()'和'isset() _plus_检查该值是否为空。 :-) –

1

isset($var)因为parametre url中存在将返回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); 

尝试编辑你的功能柯,希望这有助于

1

isset($var)返回true如果变量定义,无论这个值(除null)的。在你的情况下,它被定义,但包含一个空字符串。
你想要使用empty($var)如果未定义变量并且测试实际内容,它不会抛出异常。

Documentation

检查一个变量是否被认为是空的。一个变量是 ,如果它不存在或者其值等于FALSE,则认为它是空的。
如果变量不存在,则empty()不会生成警告。

0

这里有一些小技巧,你可以帮助实现你需要的东西:

  • 要检查是否变量被设置,

    isset($var) 
    
  • 要检查是否变量被设置,而不是空,

    !empty($var) 
    
  • 要检查,如果无功是不是空的,而不是白色的空间,

    !empty($var) && !trim($var) == false 
    
-1

值存在$_GET数组中,但他的价值是零,该功能仅isset评估该值被初始化,而不是如果该值为truthy。

如果你想知道,如果值是truthy,你可以用==操作比较数组的索引,这样var_dump($_GET['para1'] == true)

+1

该值不是'null',它是一个空字符串,请参阅我的答案。你可以运行'f($ _ GET ['para1'] === null){echo“param is null \ n”;} else {echo“not null”;}' – DaveLak

+0

你是对的,我试过说虚假价值,而不是“空”。谢谢。 –