2017-03-27 8 views
1

ユーザーが特定の文字列を含むテキストメッセージを送信したかどうかを確認しようとしています。PHP strposが常にfalseを返す

strpos関数のneedleパラメータが文字列(つまり、"Sam")にハードコードされていない限り、strposは常にfalseを返しています。私は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) 
      ... 

私は両方の比較値の型チェックを行い、それらが文字列であることを確認しました。私はここで簡単な何かを欠いているに違いない。

+0

$ recNameがNULLでないことを確認してください。 – Akintunde007

答えて

1

私はそれを理解しました。

Strposは空白に注意を払います。私のシナリオでは、テスト文字列の末尾に、Samのようなスペースがありました(サムの最後にスペースが追加されています)。この問題がある場合は、文字列の空白がないことを確認してください。

1

strposissues comparing UTF-8 and ASCII stringsのように、両方の文字列の符号化をmb_detect_encodingと再比較してください。具体的には:

# 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) 
+0

ありがとうございました。ただし、strposが無視しなかったneedleパラメーターの最後に空白がありました。そこで、 "Sam"の代わりに "Sam"を探していました。 –

関連する問題