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时,需要使用===运算符。0否则,当在字符串的索引位置找到字符串匹配时,您的if条件将错误地评估为true. 这在.php 文档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';
于 2010-11-17T05:09:50.847 回答