在 PHP 中,stripos() 函数用于查找字符串在另一个字符串中首次出现的位置(不区分大小写)。这个函数经常在处理字符串相关逻辑时使用,比如判断某个关键词是否存在于给定内容中。
然而,由于 stripos() 的返回值特性,很多开发者在判断时容易踩坑,尤其是对返回值为 0 的处理。本文将详细解析这一问题,并给出正确的判断方式。
$haystack = "Welcome to m66.net!";
$needle = "welcome";
$pos = stripos($haystack, $needle);
在上面的例子中,stripos() 将返回 0,因为 "welcome" 在目标字符串开头就出现了(虽然大小写不同,但 stripos() 不区分大小写)。
很多初学者会这样写:
if (stripos($haystack, $needle)) {
echo "找到了关键词";
} else {
echo "关键词不存在";
}
这段代码的问题在于:如果关键词出现在字符串的开头(位置为 0),if 判断会把 0 当成 false,从而错误地执行了 else 分支。
$pos = stripos($haystack, $needle);
if ($pos !== false) {
echo "找到了关键词,位置在:$pos";
} else {
echo "关键词不存在";
}
使用全等于(!== false)的写法,能准确地区分函数返回的是 0 还是 false,从而避免逻辑错误。
例如,我们要检测用户提交的评论中是否包含某些敏感词,并给予提醒: