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 при этом).


Ответы (0 шт):