<?php
if(stripos('http://cp.uctorrent.com', 'cp.utorrent.com') >= 0){
echo "Good1";
}else{
echo "Bad1";
}
if(stripos('http://uctorrent.com', 'cp.utorrent.com') >= 0){
echo "Good2";
}else{
echo "Bad2";
}
?>
输出
Good1Good2
然而它应该是
Good1Bad2
答案 0 :(得分:7)
<?php
if(false >= 0) echo "Good";
else echo "Bad";
// this code prints Good
?>
这不是一个错误,它是一个“奇怪的”布尔转换。
stripos
在找不到字符串时返回false,false在PHP中转换为0。
直接来自documentation(问题是相反的):
警告此功能可能会返回 布尔值为FALSE,但也可能返回一个 非布尔值,其值为 FALSE,例如0或“”。请阅读 关于布尔人的部分了解更多 信息。使用===运算符 测试这个的返回值 功能
答案 1 :(得分:2)
如果2 stripos
返回false
,则搜索失败,false
与0
相比时返回true
。
正确的方法是使用身份运算符来检查类型和值:
if(stripos('http://cp.uctorrent.com','cp.utorrent.com') !== false)
echo "Good1"; ^^^^^^^^^^
else
echo "Bad1";
答案 2 :(得分:2)
阅读手册会有很大帮助:
警告
此函数可能返回布尔值FALSE,但也可能返回一个非布尔值,其值为FALSE,例如0或“”。有关更多信息,请阅读有关布尔值的部分。 使用===运算符测试此函数的返回值。
答案 3 :(得分:1)
如果未找到needle,stripos()将返回布尔值FALSE。
http://php.net/manual/en/function.stripos.php
PHP中的布尔值FALSE等于整数0,即>= 0
。
答案 4 :(得分:1)
如果要检查stripos是否无法匹配,则需要使用!==或===测试类型和值,例如:
<?php
if(stripos('http://cp.uctorrent.com','cp.utorrent.com')!==false)echo "Good1";
else echo "Bad1";
if(stripos('http://uctorrent.com','cp.utorrent.com')!==false)echo "Good2";
else echo "Bad2";
?>
答案 5 :(得分:1)
再次尝试这一点,避免微优化功能使用模式引起的问题:
if (stristr('http://cp.uctorrent.com', 'cp.utorrent.com')) {
echo "Good1";
}
else {
echo "Bad1";
}
答案 6 :(得分:0)
低于$ p的值为'false'(表示0),因此它是&gt; = 0
$p = stripos('http://uctorrent.com','cp.utorrent.com');
你需要检查stripos('http://uctorrent.com','cp.utorrent.com')!== false先获得$ p(找到位置),如上所述......
答案 7 :(得分:0)
utorrent <---> uctorrent
我是个白痴......
这是法术错误......
将uctorrent与utorrent进行比较
抱歉每个人