2011-02-01 10 views
17

なぜこのスタンドアロンコードの作業ではありません。PHPのstrpos関数が機能しないのはなぜですか?

$link = 'https://google.com'; 

$unacceptables = array('https:','.doc','.pdf', '.jpg', '.jpeg', '.gif', '.bmp', '.png'); 

foreach ($unacceptables as $unacceptable) 
{ 
     if (strpos($link, $unacceptable) === true) { 

      echo 'Unacceptable Found<br />'; 

     } 
     else { 

      echo 'Acceptable!<br />'; 

     } 
} 

HTTPSが$リンク変数内に含まれているにもかかわらず、すべての時間を許容できる印刷です。

答えて

51

場合疑問には、the docsを読み取る:

[strpos]干し草列における針の最初の出現の数値位置を返します。

だからあなたはより多くのような何か試してみたい:そうstrposは番号を返して、そしてあなたがブールtrueを探しているので

// ... 
if (strpos($link, $unacceptable) !== false) { 

を。

+1

のように(笑)パンチに私を打つんでした –

7

strpos()一致するものが見つかるとtrueを返しません。最初に一致する文字列の位置を返します。ウォッチアウトでは、一致が文字列の先頭である場合、===演算子を使用しない限り、ゼロのインデックスを返します。これは、偽と等しいと見なされます。

5

あなたの失敗条件は間違っています。一致するものが見つからない場合

strposはあなたが

if (strpos($link, $unacceptable) !== false) { 
1

Strpos常に返す位置、あなたの文字列に「httpsL」検索のような(「https://google.com」明示的にチェックする必要があるので、falseを返します。 )それは0番目の位置を返し、PHPはそれを偽と評価します。

このリンクを参照してください。(あなたのための非常に便利ホープ): http://php.net/manual/en/function.strpos.php

0
if (strpos($link, $unacceptable)) 
{ 
} else { 
    /* What you want to do when it is false */ 
} 
0

strpos

関数は論理値FALSEを返すことがありますが、またに評価非ブール値を返すことがあります。 FALSE。

だから私はこの

if (strpos($link, $unacceptable) !== false) { 
    //Code 
} 
関連する問題