На этот раз поговорим о вопросах кодировок web-страниц. В процессе разработки нередко приходилось сталкиваться с появлением, так называемых,"кракозябров" на сайтах. Так называют непонятные символы, которые появляются вследствии неправильного перекодирования текста. Для сайтов самыми используемыми являются кодировки Windows-1251 и UTF-8. Я рекомендую использовать UTF-8 и в данной статье я буду говорить о проблемах, которые появляются при переходе от кодировки Windows-1251 к UTF-8. Однако, решения, которые я здесь буду рассматривать могут быть применены и в других случаях. Давайте рассмотрим основные причины, по которым могут появлятся "кракозябры".
Во-первых, бывает ситуация, когда не весь текст превращается в "кракозябры", а только часть текста. В этом случае на страницу с "правильной" кодировкой попадает текст с "неправильной".
Во-вторых, мы получаем эту красивую страницу с таинственными заклинаниями :), когда браузеру сообщается неверная кодировка страницы.
В-третьих, менее распространённая ситуация, когда строки обрезаются с помощью скриптов и на её краях появляются всё те же "кракозябры".
Теперь приступим к решению этих проблем.
1. В первом случае сначала нужно убедиться что браузер выбирает правильную кодировку страницы. Если это не так, то переходим ко второму пункту. Если с браузером всё в порядке, то нужно определиться с источником текста, который неправильно отображается. В случае, если текст статический, то есть, находится в каком-то подключаемом файле, то стоит его перекодировать в нужную нам кодировку (для UTF-8 лучше выбрать UTF-8 without BOM). Если же текст мы достаём из базы данных, то необходимо базу данных и таблицы хранить в нужной кодировке, хотя бывает достаточно сообщить серверу БД кодировку, которую мы собираемся использовать с помощью следующего запроса (если вы используете MySQL сервер)
mysql_query("SET NAMES utf8")
Этот запрос следует выполнить перед всеми последующими запросами, то есть, сразу же после выбора базы данных.
2. Если проблема заключается лишь в том, что браузеры "неправильно понимают" кодировку страниц, то есть, когда в браузере вы выставляете нужную кодировку, он правильно отображает страницы, значит вам необходимо сделать следующее. Откройте в корне сайта файл .htaccess (или создайте, если его нет) и добавьте строчку AddDefaultCharset UTF-8.
3. Для третьего случая советую вместо стандартных функций PHP работы со строками использовать мультибайтные (те, которые с префиксом mb_). Для того чтобы их
использовать, на сервере должно быть соответсвующее расширение.
Если столкнётесь с другими проблемами "кракозябров", пишите! С радостью постараюсь помочь.