@maiskiykot
Free coder

Почему in_array не работает в utf-8?

Натолкнулся на непонятное поведение функции in_array. Если скрипты делать в кодировке win-1251 все с русскими буквами в порядке - срабатывает поиск. Если скрипт делать в utf-8 - сразу не срабатывает условие if (in_array($chtoto,$gdeto)). В чем может быть загвоздка? Или вместо массива использовать строку и preg_match?
Данные отправляются на проверку методом POST
  • Вопрос задан
  • 525 просмотров
Пригласить эксперта
Ответы на вопрос 3
FanatPHP
@FanatPHP
Чебуратор тега РНР
> У меня оба файла исключительно в utf-8.

Кодировка файла не имеет вообще никакого отношения к отправляемым данным.
Имеет значение только кодировка, заданная в НТТР заголовках.

> На сервере принудительно выставлено utf-8 через htaccess

Никого никогда не интересует, что где выставлено. Важно не то, что "выставлено", а то, что фактически отдается в реальности.
Смотреть надо не в htaccess а в консоль разработчика в браузере, в какой кодировке отдает форму сервер.
В этой же самой кодировке данные будут отправлены на сервер обратно.

> В чем может быть загвоздка?

Никто не знает. Гадание на кофейной гуще не входит в профессиональные обязанности программиста.
Если одна строка не равна другой - значит надо вывести обе эти строки, включая непечатные символы, и смотреть в чем разница. Для вывода можно использовать например функцию bin2hex.
Ответ написан
webinar
@webinar Куратор тега PHP
Учим yii: https://youtu.be/-WRMlGHLgRg
Загвоздка в том, что у Вас не все в utf8. Что именно - копайте. Для начала убедитесь что и $chtoto и в $gdeto данные в одинаковой кодировке.
Ответ написан
@maiskiykot Автор вопроса
Free coder
Как обычно - сам спросил и сам ответил. Ни in_array, ни preg_match, ни даже mb_eregi с русскими буквами в UTF-8 не дружат. Нашел только mb_stristr - буду переделывать функции под нее. В целом ж... с этой utf-8!
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы