strpos() 回傳 整數位置 或 false,屬於混合回傳型別。若直接用 == 或 if ($pos) 判斷,位置 0 會被誤判為「未找到」。
$haystack = "needle23423432";
$pos = strpos($haystack, "needle"); // 回傳 0
if ($pos == false) { // 錯誤!0 == false 為 true
echo "未找到";
} else {
echo "找到"; // 實際進這裡,但邏輯已錯
}
$pos = strpos($haystack, "needle");
if ($pos === false) {
echo "未找到 (===) 正確";
} else {
echo "找到於位置 $pos (===) 正確";
}
Not found based (==) test // 錯誤判斷 Found based (===) test // 正確判斷
// 封裝成函數避免重複錯誤
function contains(string $haystack, string $needle): bool {
return strpos($haystack, $needle) !== false;
}
// 使用
if (contains($str, "keyword")) { ... }
中文等多位元組編碼請用 mb_strpos($haystack, $needle, 0, 'UTF-8'),避免位置計算錯誤。
牢記 === false,是 PHP 開發者必修的基本功。