2

PHPで別の文字列が出現するかどうか、文字列を検索する必要があります。遊んでいるコードがいくつかありますが、機能していないようです。

これが私のコードです:

while (list($key, $val) = each($keyword)) {
  $pos = strpos($location, $val);
  if($pos == false) {
    echo "allow";
    exit;
  } else {
    echo "deny";
    exit;
  }
}

以下のオプションのいくつかを試しましたが、それでも一致するものが見つかりません。これが私が探しているものです:

私は見つける必要があります:*

blah

の:

http://blah.com

何も見つからないようです。コードは通常の文で機能します。

Today, the weather was very nice.

文から任意の単語を検索しますが、(URLで)すべて一緒になっていると、検索できないようです。

4

1 に答える 1

2

phpでブール値をチェックするときは、演算子FALSEを使用する必要があります。そうしないと、文字列のインデックス位置で===文字列の一致が見つかった場合、条件は誤って。と評価されます。これは、のphpドキュメントの大きな赤いボックスに明示的に記載されています。0iftruestrpos()

exitまた、別の回答の下に残したコメントに基づいて、アクセスを許可するブロックからステートメントを削除する必要があるように見えます。

すべてをまとめると、コードは次のようになるはずです。

while (list($key, $val) = each($keyword)) {
  $pos = strpos($location, $val);
  if($pos === false) { // use === instead of ==
    echo "allow";
  } else {
    echo "deny";
    exit;
  }
}

アップデート:

あなたが提供した新しい情報で、私は論理を書き直しました:

function isAllowed($location) {
    $keywords = array('blah', 'another-restricted-word', 'yet-another-restricted-word');
    foreach($keywords as $keyword) {
        if (strpos($location, $keyword) !== FALSE) {
            return false;
        }
    }
    return true;
}

$location = 'http://blah.com/';
echo isAllowed($location) ? 'allow' : 'deny';
于 2010-11-17T05:09:50.847 に答える