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

使用PHP在另一个字符串中搜索特定字符串,php,string,search,strpos,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; } } http://blah.com

我需要在PHP中搜索一个字符串以查找另一个字符串的任何事件。我有一些代码,我一直在玩,但它似乎不工作

这是我的代码:

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

我尝试了下面的一些选项,但仍然没有找到匹配项。以下是我正在搜索的内容:

我需要找到:

blah
输入:

while (list($key, $val) = each($keyword)) {
  $pos = strpos($location, $val);
  if($pos == false) {
    echo "allow";
    exit;
  } else {
    echo "deny";
    exit;
  }
}
http://blah.com
似乎什么也找不到。该准则在常规语句中起作用:

Today, the weather was very nice.

它可以从句子中找到任何单词,但是当它们都在一起(在URL中)时,它似乎找不到它。

在php中检查布尔值
FALSE
时,需要使用
=
操作符。否则,当在字符串的
0
索引位置发现字符串匹配时,您的
if
条件将错误地计算为
true
。在文档中的一个大红色框中明确提到了这一点

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

如何检查它是否匹配,而不是false?如果您实际上不需要子字符串位置,则使用
strstr()
更简单。