Задать вопрос
@svfolder2021

Как оставить в UTF-8 строке только 2х байтовые символы?

Есть обработчик 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 и там тоже может появляться мусор, по этой причине к простой расстановке полей это не сводится.
  • Вопрос задан
  • 77 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
@rPman
Почти наверняка проблема в обработке строк в csv
Если наверно обрабатывать все символы включая \n то логично что содержимое колонок перемещается и будет мусор

У меня не было проблем с fgetcsv но нужно явно указать разделители колонок и "
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
Вот по такой маске 110xxxxx 10xxxxxx (где x - это произвольный бит) можно выделить двухбайтные символы.
Со ссылкой на вики https://en.wikipedia.org/wiki/UTF-8

Но я думаю что ты делаешь что-то не то. Тоесть тебе надо делать другое.
Ответ написан
Ваш ответ на вопрос

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

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