strpos 和 Ø 的奇怪行为

Strange behaviour of strpos and Ø

这对我来说似乎很奇怪,但也许有一个简单的解释。

尽管针肯定是大海捞针的一部分,但为什么以下代码块会导致 false

if(strpos("Ø25xØ2", "Ø")){
    echo "true";
} else {
    echo "false";
}

strpos is finding that string at offset 0, which evaluates as false. To truly detect if it's not found, you need to explicitly check both type and value using either === or !== operators,例如:

if (strpos("Ø25xØ2", "Ø") !== false) {
    echo "true";
} else {
    echo "false";
}

手册中对此也有很好的介绍。

strpos 将 return 0 如果针在大海捞针的最开始。但是 0 的计算结果为布尔值 false,因此您的 if 条件失败。

您需要与 false 进行比较,如果根本找不到针,则为 return 值:

if (false !== strpos("Ø25xØ2", "Ø")) {
    echo "true";
} else {
    echo "false";
}