Это упоминается в руководстве: strpos ()
Эта функция может возвращать логическое значение FALSE, но также может возвращать и не булево значение, которое оценивается как FALSE, например 0 или "". Пожалуйста, прочитайте раздел о логических значениях для получения дополнительной информации. Используйте оператор === для проверки возвращаемого значения этой функции.
В вашем случае строка находится по индексу 0
и в php 0 == false
Решение состоит в том, чтобы просто использовать строгий компаратор
echo strpos($string,$search) === false
? "not found"
: "found";
Еще один
echo is_int(strpos($string,$search))
? "found"
: "not found";
Или что-то ... допустим, интересно: D Просто для иллюстрации. Я не рекомендую этот.
echo strpos('_' . $string,$search) // we just shift the string 1 to the right
? "found"
: "not found";