Re: Проверить UTF-8 строку на UTF-8 в PHP
От: dkameleon Украина http://dkameleon.com
Дата: 15.03.09 05:43
Оценка:
Здравствуйте, Geri, Вы писали:

G>Получаю из открытой (небезопасной) среды строки в кодировке UTF-8, которые в последствии сохраняю в базу данных MySQL. Но изредка мне попадаются строки, содержащие по всей видимости не совсем UTF-символы, и MySQL отказывается сохранять такие сроки в поля с коллэйшином utf8_general_ci, выдавая ошибку с кодом 1366: "Incorrect string value: '\xEF\xB1' for column 'name' at row 1". Можно было бы, конечно, сделать коллэйшин utf8_bin, но тогда это поле стало бы регистро-зависимым, а не хотелось бы.


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



mysql_real_escape_string не помогает?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.