strpos/stripos(严格比较)失败

Ani*_*Ani 2 php strpos stripos

我目前有以下strpos/stripos(尝试过两者,不会改变结果),用于标记论坛帖子中的某些针.

if (stripos($row->message, (string)$commit) !== false) {
  // Do stuff
}
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,当haystack($ row-> message)包含needle($ commit)(使用强制转换,因为$ commit可以是一个int)strpos/stripos返回false时,东西大多数工作正常.

例如:

$test = stripos($row->message, (string)$commit);
Run Code Online (Sandbox Code Playgroud)

非工作场景的一个示例是:

// (string)$commit 
string(7) "818df50"
// $row->message
string(321) "Intro. Crashes as soon as the main menu is shown. Graphics are horribly broken, no fixes have been found as of yet. [attachment=194] Build Used: Pull Request #3333 (0.0.3-5929) -> RPCS3-v0.0.3-2017-08-27-818f50b Side note: States it can display at 1080p, yet it is boxed in 1080p. However, it is fine in 720p."
// $test (strpos/stripos) 
bool(false)
Run Code Online (Sandbox Code Playgroud)

工作方案的一个示例是:

// (string)$commit
string(7) "2570911" 
// $row->message
string(219) "RPCS3 v0.0.3-3-2570911 Alpha The game doesn't even show its graphics window. [quote] ·F 0:00:34.138812 {PPU[0x1000000] Thread (main_thread) [0x0087c094]} MEM: Access violation writing location 0xcffff2d0 [/quote]" int(15) [2570911]
// $test (strpos/stripos)
int(15) [2570911]
Run Code Online (Sandbox Code Playgroud)

我不知道我是否遗漏了一些非常明显的东西,我检查过几次并且接近似乎是正确的.

注意:我知道有很多方法可以做到这一点,但在这个特定场景中我需要这些字符串比较.

提前致谢.

小智 6

在你的例子中......

// (string)$commit 
string(7) "818df50"
// $row->message
string(321) "Intro. Crashes as soon as the main menu is shown. Graphics are horribly broken, no fixes have been found as of yet. [attachment=194] Build Used: Pull Request #3333 (0.0.3-5929) -> RPCS3-v0.0.3-2017-08-27-818f50b Side note: States it can display at 1080p, yet it is boxed in 1080p. However, it is fine in 720p."
// $test (strpos/stripos) 
bool(false)
Run Code Online (Sandbox Code Playgroud)

大海捞针818df50不包含针头.haystack包含一个非常接近的字符串(818f50),但这不完全匹配.

所以...它正在做正确的操作.