Почему file() не читает кириллицу?

340
05 мая 2017, 20:07

Пытаюсь занести данные из текстового файла в file в массив и сравнить. Но столкнулся с проблемой, что с кириллицей ничего не работает. Если текст в текстовом файле на английском, то все отлично, а если на русском in_array отказывается работать. Файл обработчик:

$text = $_POST["chat"];
if (in_array($text, file(names.txt))) {
    echo "Совпадение найдено!";
 //какой-то еще код
}

Файл names.txt:

Заказ  
Оформление 
Договор

Answer 1

Функция file() разбивает файл на строки и помещает их в массив. НО(!!!) символ завершения строки не удаляет. Соответственно ваш файл преобразуется в массив:

["Заказ\n",
"Оформление\n",
"Договор\n"]

Для того, чтобы избежать этой ситуации, необходимо использовать флаг FILE_IGNORE_NEW_LINES (ну и FILE_SKIP_EMPTY_LINES тоже полезно добавить)

Соответственно:

file(names.txt, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
READ ALSO
Связанные посты

Связанные посты

Интересует вопрос по плагину: Contextual Related Posts Мне нужно выводить с помощью do_shortcode() связанные посты, но проблема в том, что если необходимо найти...

205
Динамические значения bootstrap multiselect

Динамические значения bootstrap multiselect

Как можно динамически изменять значения в мультиселекте, при условии, что есть поля в json? есть экшн, возвращающий json с районами, в зависимости...

225
PHP, замена html тегов с занесением их в массив

PHP, замена html тегов с занесением их в массив

Пытаюсь сообразить, как можно реализовать следующую задачу:

214