Есть обработчик CSV файлов, с последующей фильтрацией нужных данных по эталонным строкам и дальнейшей записью в MySQL.
Проблема заключается в том что не всегда данные прилетают чистыми и непонятно что искать и удалять для фильтрации.
На данный момент нами применяется такая функция, но она все же пропускает мусор, и база данных при импорте падает с ошибкой 22007, даже с учетом того что кодировка в таблице и соединение utf8mb4
public function normalizeString($string): string
{
return trim(mb_strtolower(
preg_replace('/[^a-zA-Zа-яА-Я0-9 -\/+]/ui', '', $string)
));
}
Для импорта используется это расширение.
https://github.com/ruskid/yii2-csv-importer
Для которого отдельно написана стратегия, и свой ридер CSVYieldReader с работой через Yield, и у нас не рядовое чтение простых CSV а чтение сотен тысяч записей из файлов.
Так же поставщики этих файлов парсят зачастую эту информацию и мусор там может прилететь какой угодно.
Кроме того у нас еще есть консольный конвертер который, конвертирует Excel файлы в CSV и там тоже может появляться мусор, по этой причине к простой расстановке полей это не сводится.