使用PHP在另一个字符串中搜索特定字符串

时间:2010-11-17 05:06:45

标签: php string search strpos

我需要在字符串中搜索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中)它似乎无法找到它。

1 个答案:

答案 0 :(得分:2)

在php中检查布尔值FALSE时,需要使用===运算符。否则,当在字符串的0索引位置找到字符串匹配时,您的if条件将错误地评估为true。这在php docs for strpos()中的大红框中明确提到。

此外,根据您在另一个答案下留下的评论,似乎您需要从允许访问的块中删除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';