简单的PHP strpos函数不起作用,为什么?

30

为什么这个独立的代码不起作用:

$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 />';
        }
}

即使 $link 变量中包含 https,每次都会打印出可接受的结果。


1
一个针对那些无法使用 strpos 的注释:要小心不要混淆strpos( $haystack, $needle )与另一个函数in_array( $needle, $haystack )。正如你所看到的,参数的顺序是颠倒的 - Marco Panichi
5个回答

80
当你有疑问时,阅读文档
【strpos】函数返回在字符串haystack中第一次出现needle的位置。
所以你想尝试一些更类似的东西:
// ...
if (strpos($link, $unacceptable) !== false) {

否则,strpos将返回一个数字,而你要寻找的是一个布尔值true。

14

strpos()函数在找到匹配项时不会返回true,而是返回第一个匹配字符串的位置。请注意,如果匹配项位于字符串开头,则返回零索引,这将被认为是false,除非您使用===运算符。


8

你的失败条件有误。

如果未找到匹配项,strpos将返回false,因此您需要明确检查。

if (strpos($link, $unacceptable) !== false) {

2

strpos函数总是返回位置,例如在字符串“https://google.com”中搜索“httpsL”,它返回第0个位置,并且PHP将其评估为false。

请查看此链接(希望对您有用): http://php.net/manual/en/function.strpos.php


1

strpos

该函数可能返回布尔值FALSE,但也可能返回一个非布尔值,其值为FALSE。

因此我这样做了

if (strpos($link, $unacceptable) !== false) {
    //Code
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接