Проверить UTF-8 строку на UTF-8 в PHP
От: Geri Россия http://web-notes.ru/
Дата: 14.03.09 12:19
Оценка:
Получаю из открытой (небезопасной) среды строки в кодировке UTF-8, которые в последствии сохраняю в базу данных MySQL. Но изредка мне попадаются строки, содержащие по всей видимости не совсем UTF-символы, и MySQL отказывается сохранять такие сроки в поля с коллэйшином utf8_general_ci, выдавая ошибку с кодом 1366: "Incorrect string value: '\xEF\xB1' for column 'name' at row 1". Можно было бы, конечно, сделать коллэйшин utf8_bin, но тогда это поле стало бы регистро-зависимым, а не хотелось бы.

Я хотел бы производить какую-то проверку строки на содержание в ней действительно UTF-8 символов, чтобы не UTF-8 символы заменить хотя бы на символы "?", чтобы MySQL не выдавал ошибку и это не приводило к потере и других данных. Вот только в стандартном окружении PHP я что-то не могу найти подходящих функций. Как вариант, можно разбивать строку на отдельные символы через mb_strlen() и mb_substr(), а потом делать какое-нибудь бессмысленное преобразование через iconv() типа из UTF-8 в UTF-16 и обратно. Если символ обратно сконвертировалось в тот же самый -- значит все окей, иначе -- заменяем на "?". Но я не знаю как корректно будут вести себя эти функции с некорректными строками. Есть ли какой-то более простой и верный способ осуществить желаемое?
-- С уважением, Павел Мелехов, Екатеринбург.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.