为什么这个独立代码不起作用:
$link = 'https://google.com';
$unacceptables = array('https:','.doc','.pdf', '.jpg', '.jpeg', '.gif', '.bmp', '.png');
foreach ($unacceptables as $unacceptable) {
if (strpos($link, $unacceptable) === true) {
echo 'Unacceptable Found<br />';
} else {
echo 'Acceptable!<br />';
}
}
即使https包含在$link
变量中,它每次都可以打印。
答案 0 :(得分:56)
如有疑问,请阅读the docs:
[strpos]返回haystack字符串中第一次出现needle的数字位置。
所以你想尝试更多的东西:
// ...
if (strpos($link, $unacceptable) !== false) {
因为否则strpos
会返回一个数字,而您正在寻找一个布尔值true
。
答案 1 :(得分:8)
strpos()在找到匹配项时不返回true,它返回第一个匹配字符串的位置。注意,如果匹配是字符串的开头,它将返回一个零的索引,除非你使用===运算符,否则它将等于false。
答案 2 :(得分:6)
你的失败情况是错误的。
如果找不到匹配,strpos返回false,因此您需要明确检查
if (strpos($link, $unacceptable) !== false) {
答案 3 :(得分:1)
Strpos始终返回位置,就像您在字符串中搜索“httpsL”('https://google.com';;)然后返回第0个位置,PHP将其评估为false。
请看这个链接:(希望它对你非常有用): http://php.net/manual/en/function.strpos.php
答案 4 :(得分:0)
if (strpos($link, $unacceptable))
{
} else {
/* What you want to do when it is false */
}
答案 5 :(得分:0)
strpos
函数可能返回布尔值FALSE,但也可能返回一个非布尔值,其值为FALSE。
所以我确实喜欢这个
if (strpos($link, $unacceptable) !== false) {
//Code
}