简单的PHP strpos功能不起作用,为什么?

Dan*_*iel 21 php strpos

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

$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 />';
        }
}
Run Code Online (Sandbox Code Playgroud)

即使https包含在$link变量中,每次打印都是可接受的.

cor*_*ard 60

如有疑问,请阅读文档:

[strpos]返回haystack字符串中第一次出现needle的数字位置.

所以你想尝试更像的东西:

// ...
if (strpos($link, $unacceptable) !== false) {
Run Code Online (Sandbox Code Playgroud)

因为否则strpos返回一个数字,而你正在寻找一个布尔值true.


acr*_*man 9

strpos()在找到匹配项时不返回true,它返回第一个匹配字符串的位置.注意,如果匹配是字符串的开头,它将返回零索引,除非使用===运算符,否则将比较为等于false.


Foo*_*Bah 6

你的失败情况是错误的.

如果未找到匹配,则strpos返回false,因此您需要显式检查

if (strpos($link, $unacceptable) !== false) {
Run Code Online (Sandbox Code Playgroud)