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

时间:2011-02-01 04:36:58

标签: 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 />';
        }
}

即使https包含在$link变量中,它每次都可以打印。

6 个答案:

答案 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
}