首页 >后端开发 >php教程 >为什么在检查字符串时 `strpos() === true` 会给出意外的结果?

为什么在检查字符串时 `strpos() === true` 会给出意外的结果?

DDD
DDD原创
2024-12-29 09:44:16400浏览

Why Does `strpos() === true` Give Unexpected Results When Checking for Strings?

为什么 strpos() 与 True 的严格比较会产生意外结果?

问题:

在给定的代码中,目的是找到里面任何不可接受的字符串$link 变量。但是,即使 $link 中存在“https”,代码也会打印“Acceptable”。这种意外行为背后的原因是什么?

$link = 'https://google.com';
$unacceptables = ['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 />';
    }
}

答案:

解释在于 strpos() 函数的本质。如文档所述,strpos() 返回 $link 中 $unacceptable 第一次出现的数字位置。但是,在原始代码中,它与具有布尔值的 true 进行了错误的比较。这会导致意外结果。

要解决此问题,应修改比较以检查非 false 值。通过使用 !== false,代码将正确识别任何发现的不可接受的字符串。

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

以上是为什么在检查字符串时 `strpos() === true` 会给出意外的结果?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn