Как средствами MYSQL/PHP определить «кракозябры»?

Здравствуйте.

Есть MySQL и приложение на UTF-8.

Есть таблица (предположим user: id, name), которая содержит в себе большое количество записей, значения которых получено из сторонних источников.

Бывает что такие источники меняют свою кодировку, предположим на CP1251, я же по прежнему продолжаю записывать такие значения (без предварительной перекодировки), например:

Мы Выбираем
Мало Мне

Собственно, вопрос. Как более правильно определить все такие записи для их удаления? Отмечу, не лечения, а именно удаления.

В своём решении я составляю список запрещенных подстрок, например: Р°, после чего получаю все записи из таблицы и средствами PHP проверяю нахождение такой подстроки в поле name. Такой подход работает неплохо, но с определенной погрешностью, а если увеличить базу запрещенных символов - с ней увеличивается и возможность задеть цельные данные.

Буду рад услышать возможные пути решения.

Большое Человеческое Спасибо! ;-)
  • Вопрос задан
  • 592 просмотра
Решения вопроса 1
hrebet
@hrebet Автор вопроса
В итоге я как и планировал собрал список наиболее популярных подстрок, у меня это получилось:

$chars = [
	'Ђ',
	'Рњ',
	'Р°',
	'Рµ',
	'Рџ',
	'Р№',
	'СЏ',
	'Р‘',
	'Рђ',
	'Р»',
	'Рї',
	'С€',
	'¶',
	'Р”',
	'‡',
	'Р›',
	'Р•',
];

Прошелся циклом по всем записям на определение вхождений таких подстрок с помощью регулярных выражений или substr_count и при выявлении - избавлялся от таких позиций.

Отмечу, что меня не интересовало лечение таких строк, в другом случае можно было-бы обойтись обычным iconv.

;-)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@nozzy
Symfony, Laravel, SQL
В regexp-условие можно добавить символы
select
text_column 
from
your_table
where not text_column regexp '[A-Za-z0-9]';
Ответ написан
Ваш ответ на вопрос

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

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