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

ttcibm8c  于 2022-12-28  发布在  PHP
关注(0)|答案(5)|浏览(136)

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

$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,每次打印都是可以接受的。

s4chpxco

s4chpxco1#

如有疑问,请读取the docs
[strpos]返回needle在haystack字符串中第一次出现的数值位置。
所以你想尝试一些更像是:

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

因为strpos返回的是一个数字,而你要找的是一个布尔值。

kninwzqo

kninwzqo2#

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

dgenwo3n

dgenwo3n3#

您的故障条件错误。
如果未找到匹配项,strpos将返回false,因此需要显式检查

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

wxclj1h54#

Strpos总是返回位置,就像你在字符串('https://www.example.com';)中搜索“httpsL”google.com一样,然后它返回第0个位置,PHP将其评估为false。
请看这个链接:(希望它对你很有用):http://php.net/manual/en/function.strpos.php

yb3bgrhw

yb3bgrhw5#

斯特尔波斯
函数可能返回布尔值FALSE,但也可能返回计算结果为FALSE的非布尔值。
所以我就这样做了

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

相关问题