2017-08-02 14 views
0

私はPARA1とPARA2を判断しようとするURLどのようにPHPのURLパラメータを解析ですか?

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

を持っています。

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

isset($_GET['para1'])は間違いだと思いますが、そうではありません。

私の問題:

isset($_GET['para1'])が、それはPHPでURLを解析true.Howですなぜですか?

+1

のように、==オペレータとの配列インデックスを比較することができます。 issetテスト後に空であるかどうかをテストします。 –

+1

'para1'は空の値で存在します。存在し、空でないかどうかを確認するには、 'empty($ _ GET ['para1'])'を使用します。 '' –

+0

phlでどのようにURLを解析するのですか?なぜpara1が存在するのですか? –

答えて

2

多くの人が$_GET['para1']の値がnullであると言っていますが、そうではありません。これをテストするための便利なスクリプトを提供するa comment on the php.net $_GET docsがあります。

URLを考える:あなたは結果をテストするには、このスクリプトを使用することができます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 

これはケースです値は実際には空の文字列ですだから、直接あなたの質問に答える

それはpara1を表示されませんが、それが実際に、設定された値を持っています。値は空の文字列("")です。この値は偽であるにもかかわらず、まだ値であり、isset()がtrueを返します。 !empty()を使用すると、空の文字列でfalseを返すことができます。 isset()empty()is_null()hereの比較を参照してください。ここで

+0

あなたの答えは正しいようですが、わかりません。 –

+0

スクリプトを実行するだけです – DaveLak

0

isset()は、要求には空文字列が設定されているため、trueを返します。

!empty()を使用します。あなたの要求に

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

para1=nullのでpara2=2

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

@MagnusErikssonああありがとう、私は両方を使用する答えを更新しました。 – DrRoach

+0

私は既にis_null()の代わりに 'empty()'を使うように答えを変更しました:) – DrRoach

+1

'isset()'は 'empty()'が 'isset()'と同じであるので、 _plus_は、値が空であると見なすかどうかをチェックします。 :-) –

1

isset($var) parametreがURLに存在するので、あなたはその値をチェックすると、あなたがつもり空を見つけ、trueを返します。文字列""

あなたも同じように空が値に対してtrueを返すことに注意を払うだけで、空の値をテストするために、 empty($var)機能を使用することができます

:それは私は通常parametresを得る偽

を返します

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); 

1

isset($var)変数が定義されている場合は、値に関係なくnullを除き、trueを返します。あなたの場合、それは定義されていますが、空の文字列を含んでいます。
empty($var)は、変数が定義されておらず、実際の内容をテストする場合に例外をスローしません。

Documentation

変数が空であると考えられるかどうかを確認。変数が存在しない場合、またはその値がFALSEの場合、変数は とみなされます。
変数が存在しない場合、empty()は警告を生成しません。

0

はあなたが必要なものを達成するために助けることができるいくつかのいくつかのヒントあなたは:

isset($var) 
、VARが設定されているかどうかを確認するには

  • VARが空のセットとされていないかどうかを確認するには、

    !empty($var) 
    
  • varが空ではなく空白でないか確認するには

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

値が$_GET配列に存在するが、彼の値がnullの場合、機能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

あなたが正しいと試しました。言い換えれば、偽の価値であり、「偽」ではない。ありがとう。 –

関連する問題