【问题标题】:Search for a specific string within another string with PHP使用 PHP 在另一个字符串中搜索特定字符串
【发布时间】:2011-05-11 05:50:17
【问题描述】:

我需要在一个字符串中搜索任何在 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 中)时,它似乎找不到它。

【问题讨论】:

  • 如果您实际上不需要子字符串位置,使用strstr() 会更简单。

标签: php string search strpos


【解决方案1】:

在 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';

【讨论】:

  • 我如何检查它是否匹配,而不是错误?
猜你喜欢
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
  • 2013-01-18
  • 1970-01-01
  • 2020-01-06
  • 1970-01-01
  • 2012-07-23
相关资源
最近更新 更多