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