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

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

DDD
发布: 2024-12-29 09:44:16
原创
362 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板