Рецепты программирования на PHP или практические советы по программированию → Ajax - проблема в кодировках. Детектирование кодировки UTF-8.
Браузеры у клиентов разные. Иногда случается, что в Бд пишутся козябрики. Ниже - простой способ вовремя распознать кодировку UTF-8 и переконвертировать ее в стандартную, CP1251.
Случается такой казус довольно часто в AJAX-скриптах, которым передаются текстовые параметры методом GET через строку браузера.
Функция определяет является ли кодировка UTF8. В случае успеха - возвращает TRUE, иначе - FALSE.
| 1 | function isUTF8($str) |
| 2 | { |
| 3 | return preg_match(%(?: |
| 4 | [xC2-xDF][x80-xBF] |
| 5 | |xE0[xA0-xBF][x80-xBF] |
| 6 | |[xE1-xECxEExEF][x80-xBF]{2} |
| 7 | |xED[x80-x9F][x80-xBF] |
| 8 | |xF0[x90-xBF][x80-xBF]{2} |
| 9 | |[xF1-xF3][x80-xBF]{3} |
| 10 | |xF4[x80-x8F][x80-xBF]{2} |
| 11 | )+%xs, $str); |
| 12 | } |
Использовать довольно просто:
| 1 | if(isUTF8($str)) $str = iconv('utf-8', 'cp1251', $str); |
Теперь, если пользователь ввел козябрики в кодировке UTF8, то на выходе они сконвертируются в cp1251. Если в cp1251 - то на выходе, так и останется эта кодировка. Вызов функции iconv без предварительной проверки и даже с параметрами //TRANSLATE и //IGNORE - сгенерит ошибку.
