strpos() 意外返回 false

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

我正在编写一个简单的函数,但由于某种原因(可能是一个简单的原因)它对我不起作用。

function check_value($postID) 
{
    $ID = $postID;
    $cookie = $_COOKIE['list_of_IDS'];
    $position = strpos($cookie,$ID);
    echo 'ID:'.$ID.'-Cookie:'.$cookie;
    if ($position !== false)
    {
        echo "ID is in the cookie";
    }
}

在试图找出问题所在时,我将该回显线放在

if
语句上方,以确保变量中确实有内容。

我的问题是,

if
语句永远不会打印出来,尽管
$cookie
值包含
$ID
值中的数字序列。

A

$postID
是一个数字
123123

$cookie
字符串通常类似于
123123.23422.234234.2342342.234234

php types strpos
3个回答
15
投票

Strpos 不适用于 int,因此您需要将 ID 转换为字符串。 试试这个:

$ID = (string)$postID;

2
投票

请注意,如果您的 cookie 字符串看起来像

123123.23422.234234.2342342.234234
并且您正在寻找 ID,例如
1231
23
,则您的函数将返回
TRUE
,而实际上该 ID 不在列表中。您当前的
strpos()
实现也将匹配部分数字。

这是一个简单的解决方法,要求 ID 周围有点。

$position = strpos('.'.$cookie.'.', '.'.$ID.'.');

-2
投票

是的,正如 Brock 所说,Strpos 不能与 int 一起使用,所以你必须强制转换 id。 所以需要对您的代码进行一些更改。

function check_value($postID) 
    {
        $ID = $postID;
        $cookie = $_COOKIE['list_of_IDS'];
        $position = strpos($cookie,$ID);
        echo 'ID:'.$ID.'-Cookie:'.$cookie;
            if ($position !== false)
        {
                echo "ID is in the cookie";
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.