1. Выкиньте на помойку print_r и научитесь всегда пользоваться var_dump()
2. Выполните свой поиск
3. Потом поищите строку "far cry 5"
4. Сравните результат
5. Прочтите, наконец, документацию по stripos, в частности то, что там специально выделено красным
Ипатьев, всётаки у print_r() вывод массивов поприятнее глазу, в сравнении с var_dump(). И не всегда при дебаге обязательно видеть тип данных.
Хотя конечно... Вот буквально вчера 15 минут боролся с неожиданным глюком в скрипте, пока не добрался до сравнения на идентичность ===. Оба на, сам же так писал! Пришлось править обработку данных из командной строки.
Ипатьев, конечно для автора, которому видимо нужно только true/false - безразлично. А если проверять точное положение подстроки в русском UTF-8 тексте - уже становится критично.
Ипатьев, если цель автора написать корректный и правильно работающий код повторю, если есть mb_fincname для искомой funcname нужно использовать только mb_ версию ВСЕГДА, БЕЗ ОГОВОРОК. Это принципиально разные по работе функции - mb_ версии работают правильно, обычные функции работают не верно (никто с однобайтовыми кодировками не работает по серьезному).
Анатолий Медведев, прочтите, что AUser0 написал. Есть ситуации, в которых mb функции просто не нужны
К примеру, не существует mb аналога для str_replace. Как раз по этой причине.
Но в целом я с вами соглашусь. На формуе для новичков, которые не понимают, что делают, так и надо писать: ВСЕГДА, БЕЗ ОГОВОРОК. Я и сам так делаю, когда заходит речь о подготовленных запросах например :)
Ипатьев, str_replace и так умеет работать с многобайтовыми кодировками - потому у нее и нет mb_ версии (они появились что бы исправить ошибки не ломая совместимости с прошлыми версиями).
С тем же что написал AUser0 я согласен и она повторяет мой тезис в другой форме, моя реплика была только в вашу сторону -
Чисто для поиска их использовать не имеет смысла, обычные варианты дадут тот же результат
- этот тезис в корне неверен и вводит в заблуждение людей.
Анатолий Медведев, я уважаю некоторую догматичность, но только если она не идет вразрез со здравым смыслом :)
str_replace никаким местом не умеет "работать с многобайтовыми кодировками". Во всяком случае, в том смысле, который вкладываете в это понятие вы. Повторюсь, ей это умение просто не нужно. Что доказывает тезис о том, что не всегда при работе с многобайтовыми строками надо обязательно кровь из носу использовать только многобайтовые функции. иногда и однобайтовой достаточно. В как в случае с str_replace или при использовании strpos для установления факта наличия подстроки в строке.
Ипатьев, странная у вас логика, работать не умеет но работает! (то что внутренний механизм реализации функции позволяет ну думать о кодировках данных этого не отменяет) То что я говорю не догма, а как раз таки здравый смысл - мы работаем по умолчанию с многобатовыми кодировками, однобатовыми можно пренебречь (т.к. это принять за частный случай многобайтовой) и не знать бед.