Что делать если на сайте проблема с кодировкой и отображаются непонятные символы? Все предельно просто. Кодировка задается всего в трех местах, и чтобы решить проблему вам нужно эти три места проверить и убедиться, что кодировка везде совпадает.
Содержимое статьи
Заголовки ответа сервера
Это практически всегда наиболее значимый для браузеров параметр. Когда вы открываете какую то страницу у себя в браузере, то самое первое что браузер получает в ответ от сервера это «заголовки». Один из этих заголовков может указывать на кодировку, обратите внимание на строку «Content-Type: text/html; charset=utf-8». Чтобы проверить какую кодировку выставляет ваш сервер, нужно воспользоваться средствами разработчика в браузере (ctrl + shift + I в Опере, Хроме). Подробнее на скриншоте:
Этот заголовок может отсутствовать. Ничего страшного, проверяйте дальше если не нашли нужный заголовок.
Кодировка в meta-тэге
Второе место которое вам необходимо проверить это кодировка в исходном html-коде страницы. Откройте проблемную страницу в браузере, кликните правой кнопкой мыши в любом месте страницы и выберите пункт «Просмотр исходного кода страницы» или похожий. В исходном коде страницы сделайте поиск по слову «meta». Вы найдете один из этих вариантов:
- Если страница сверстана в html4, xhtml
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
- Если страница сверстана в HTML5
<meta charset="UTF-8">
На скриншоте показан один из этих вариантов:
Мета-тэг может отсутствовать на странице. В этом опять таки ничего страшного нет. Проверьте заголовки сервера и кодировку текста.
Кодировка самого текста
И последнее место которое вам нужно проверить — это кодировка самого текста. Если проблемный текст хранится в файлах (например как в битриксе, статические страницы), то нужно проверить кодировку тех файлов в которых хранится текст. Для проверки нужно скачать файл и открыть его например в notepad++, там есть отдельный пункт меню «Кодировки», где сразу все видно:
Как правило кодировка у всех файлов сайта совпадает. То есть вообще все файлы сайта практически всегда хранятся в одинаковой кодировке. Можете скачать несколько файлов наугад, например файлы темы и какие то служебные скрипты, а потом сверьте в них кодировку.
Текст который выводится на страницу может хранится в базе данных, а не в файле. В базе данных содержимое страниц хранится у многих CMS, например у wordpress и drupal. Если текст хранится в БД, то вам нужно будет посмотреть содержимое таблиц, это можно сделать с помощью phpmyadmin. Вот так выглядит список таблиц в отдельной базе данных, там есть отдельный столбец с кодировками:
Сам текст внутри таблицы должен нормально читаться, как на скриншоте:
Если вы в notepad++ при открытии файла или в БД видите кракозябры, то значит файл был сохранен в неправильной кодировке и возможно даже несколько раз подряд. В этом случае довольно сложно будет разобраться какая была кодировка у текста изначально. Для определения изначальной кодировки текста после череды сохранений воспользуйтесь бесплатным инструментом от студии Артемия Лебедева, декодером. Вот ссылка на декодер:
http://www.artlebedev.ru/tools/decoder/
Туда нужно скопировать сами кракозябры и нажать кнопку «Расшифрвать». Есть неплохой шанс, что вам удастся узнать изначальную кодировку текста.
Кодировка должна совпадать!
Обращаю ваше внимание еще раз. Во всех трех местах кодировка должна быть одинаковая. И в заголовках ответа сервера, и в мета-тэге и сам текст должны храниться в одинаковой кодировке. Кроме того, совсем не обязательно, чтобы кодировка была указана везде. Иногда бывает так, что кодировка в ответах сервера не отдается, ничего страшного нет, проверяйте другие места. Мета-тэг тоже не всегда присутствует на странице. Только у текста всегда есть кодировка. Не бывает текста без кодировки.
В общем то и все. После проверки всех трех мест вы поймете где именно проблема, и можно уже ее решать.