YSandro спасибо, были подозрения на несоответствия типов данных, но не придал этому должного значения. Добавлено спустя 5 минут 6 секунд: Желаю тебе быть чутку мужественнее Человек который разбирается, нашел причину без всяких понтов типа "бро", "твое мнение ни о чем", тем более что в твоем случае они вовсе не оправданы.
Чего-чего? strpos проверяет посимвольно, из рассчёта, что каждый символ 1 байт, а вот mb_strpos знает многобайтные кодировки. Но обе функции работают со строками
int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] ) int mb_strpos ( string $haystack , string $needle [, int $offset = 0 [, string $encoding ]] ) обрати внимание на разницу в параметре $needle