strpos和Ø的奇怪行为

时间:2015-01-31 14:17:36

标签: php strpos

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

为什么以下代码块会导致false,尽管针头绝对是大海捞针的一部分?

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

2 个答案:

答案 0 :(得分:3)

strpos在偏移0处找到该字符串,其结果为false。要真正检测是否找不到,您需要使用===!== operators明确检查类型,例如:

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

手册中也详细介绍了这一点。

答案 1 :(得分:0)

如果针头位于大海捞针的最开头,

strpos将返回0。但0评估为布尔false,因此您的if条件失败。

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

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