2017-08-02 53 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

你是對的,我試過說虛假價值,而不是「空」。謝謝。 –