preg_replace и ASCII
Не могу понять почему при использовании регулярки для вырезки из текста символов по шаблону, у меня в итоге возвращается пустая строка...
Из базы данных приходит строка детального описания товара, она сохраняется в переменную, далее я определяю кодировку данных этой переменной mb_detect_encoding и она возвращает ASCII. В этом тексте есть вот такие слова 'Różowy', 'Beżowo-niebieski', 'Beżowo-różowy' которые мне нужно вырезать, потому что если такой текст попадет в CSV файл, то потом я этот файл не смогу перекодировать в cp1251 с помощью утилиты
recode utf8..cp1251
Будет ошибка
recode: offers_2900.csv failed: Invalid input in step `UTF-8..CP1251'
Сам скрипт php в котором данные из БД берутся и выполняется вся остальная работа по формированию CSV имеет кодировку UTF-8, добавил еще в начало файла установку кодировки
header('Content-Type: text/html; charset=UTF-8');
mb_internal_encoding("UTF-8");
но это не помогает.
Пробовал перекодировать перед передачей в функцию
$dt = mb_convert_encoding($arProduct['DETAIL_TEXT'], "UTF-8");
$clearText = Util::convert_to_normal_text($dt);
но тогда в CSV текст есть но он с ромбами
Пла��е а��. 020 для пляжного о�д��а, по бокам в��окие �аз�ез�, V-об�азн�й в
Функция перекодировки такая
convert_to_normal_text(string $text): ?string {
$normal_characters = "а-яА-Яa-zA-Z0-9\s`~!@#$%^&*()_+-={}|:;<>?,.\/\"\'\\\[\]";
$normal_text = preg_replace("#[^$normal_characters]#Usi", '', $text);
return $normal_text;
}
Что не так я делаю, почему пустая строка в результате, или если не пустая то с битой кодировкой? (файл .csv итоговый в обоих случаях имеет кодировку UTF-8 при этом).