检查 strpos() == false 未能在字符串开头找到匹配项[重复]

问题描述 投票:0回答:3

我有一个包含用户付费模块的字符串。如果模块不是字符串的一部分,则应显示错误页面。

变量

$paidModules
包含
reminder newsfeed system finance

这是 PHP 部分,我在其中检查用户是否为该模块付费。如果不是这种情况,则应显示

noAccess.php
页面。

if($paidModules != null & $paidModules != "" ) {
    if (strpos($paidModules,'reminder') == false) {
        include('noAccess.php'); 
        return;
    }
}

现在的问题是,即使变量

$paidModules
包含
reminder
noAccess.php
也会显示出来。我做错了什么?

php strpos
3个回答
1
投票

来自 PHP 手册

This function may return Boolean FALSE, but may also return a 
non-Boolean value which evaluates to FALSE. 
Please read the section on Booleans for more information. 
Use the === operator for testing the return value of this function.

您想使用

===

进行等同
strpos($paidModules,'reminder') === false

0
投票

strpos()
可能会返回布尔值
false
。它还可能返回
0
作为找到的位置。

因此你需要使用严格相等

if (strpos($paidModules,'reminder') === false) {
  // code...
}

在您的情况下,因为

reminder
位于零位置。使用
==
,PHP 类型将
0 == false
转换为 true


0
投票

检查是否完全错误,这样就不会得到字符串位置 0:

if (strpos($paidModules,'reminder') === false) {

© www.soinside.com 2019 - 2024. All rights reserved.