php strpos总是返回false

时间:2017-03-27 04:08:40

标签: php twilio strpos

我正在尝试确定用户是否发送了包含特定字符串的短信。

我遇到一个奇怪的问题,strpos总是返回false,除非strpos函数的needle参数被硬编码为字符串,即"Sam"。我通过mysqli_fetchassoc获取所需的针变量的值,并将其与从$_REQUEST['Body']检索到的文本消息体进行比较。

while ($row = mysqli_fetch_assoc($queryResult))
    {           
        if (mysqli_num_rows($queryResult) > 1)
        {
            //$_REQUEST['Body'] is the body of the incoming text message that Twilio will process
            $messageBody= $_REQUEST['Body'];
            $recName = $row['rFName'];
            $recId = $row['recipientID'];



            if (strpos($messageBody, $recName) !== false)
            ...

如果我将针参数硬编码为字符串,如下所示,那么它可以正常工作。

 //This works
           if (strpos($messageBody, "Sam") !== false)
            ...

我对两个比较值都进行了类型检查,并确保它们是字符串。我必须在这里遗漏一些简单的东西。

2 个答案:

答案 0 :(得分:1)

仔细检查与mb_detect_encoding进行比较的两个字符串的编码,因为strpos可以issues comparing UTF-8 and ASCII strings。具体做法是:

# Now, encoding the string "Fábio" to utf8, we get some "unexpected" outputs.
# Every letter that is no in regular ASCII table, will use 4 positions(bytes).
# The starting point remains like before.
# We cant find the characted, because the haystack string is now encoded.

var_dump(strpos(utf8_encode("Fábio"), 'á'));
#bool(false)

答案 1 :(得分:1)

我明白了。

Strpos注重空白,去图。在我的场景中,我的测试字符串末尾有一个空格,如下所示:Sam。(Sam末尾增加了一个空格)如果你确定要查看字符串中的任何杂散空格有这个问题。