简单的 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 变量中,它每次都可以接受打印。

原文由 Daniel 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 359
2 个回答

如有疑问,请阅读 文档

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

所以你想尝试更像:

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

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

原文由 coreyward 发布,翻译遵循 CC BY-SA 2.5 许可协议

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

原文由 acrosman 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏