Интересные задачи верстки и клиентского программирования

Проблемы с кодировкой сайта?

добавил Шубин Александр 19 Июнь, 2013


Что делать если на сайте проблема с кодировкой и отображаются непонятные символы? Все предельно просто. Кодировка задается всего в трех местах, и чтобы решить проблему вам нужно эти три места проверить и убедиться, что кодировка везде совпадает.

Заголовки ответа сервера

Это практически всегда наиболее значимый для браузеров параметр. Когда вы открываете какую то страницу у себя в браузере, то самое первое что браузер получает в ответ от сервера это «заголовки». Один из этих заголовков может указывать на кодировку, обратите внимание на строку «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/

Туда нужно скопировать сами кракозябры и нажать кнопку «Расшифрвать». Есть неплохой шанс, что вам удастся узнать изначальную кодировку текста.

Кодировка должна совпадать!

Обращаю ваше внимание еще раз. Во всех трех местах кодировка должна быть одинаковая. И в заголовках ответа сервера, и в мета-тэге и сам текст должны храниться в одинаковой кодировке. Кроме того, совсем не обязательно, чтобы кодировка была указана везде. Иногда бывает так, что кодировка в ответах сервера не отдается, ничего страшного нет, проверяйте другие места. Мета-тэг тоже не всегда присутствует на странице. Только у текста всегда есть кодировка. Не бывает текста без кодировки.

В общем то и все. После проверки всех трех мест вы поймете где именно проблема, и можно уже ее решать.


добавил Шубин Александр 19 Июнь, 2013
Рубрика: Верстка


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *