php strpos 总是返回 false
php strpos always returning false
我正在尝试确定用户是否发送了包含特定字符串的短信。
我有一个奇怪的问题,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)
...
如果我将 needle 参数硬编码为字符串,如下所示,则它可以正常工作。
//This works
if (strpos($messageBody, "Sam") !== false)
...
我已经对两个比较值进行了类型检查并确保它们是字符串。我一定在这里遗漏了一些简单的东西。
仔细检查与 mb_detect_encoding
, as strpos
can have 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)
我想通了。
Strpos关注白space,上图。在我的场景中,我的测试字符串末尾有一个 space,看起来像这样:Sam
。(在 Sam 的末尾添加了 space)一定要检查如果您遇到此问题,请在您的字符串中添加任何杂散的 whitespace。
我正在尝试确定用户是否发送了包含特定字符串的短信。
我有一个奇怪的问题,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)
...
如果我将 needle 参数硬编码为字符串,如下所示,则它可以正常工作。
//This works
if (strpos($messageBody, "Sam") !== false)
...
我已经对两个比较值进行了类型检查并确保它们是字符串。我一定在这里遗漏了一些简单的东西。
仔细检查与 mb_detect_encoding
, as strpos
can have 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)
我想通了。
Strpos关注白space,上图。在我的场景中,我的测试字符串末尾有一个 space,看起来像这样:Sam
。(在 Sam 的末尾添加了 space)一定要检查如果您遇到此问题,请在您的字符串中添加任何杂散的 whitespace。