«Ваш МАСТЕР»
На главнуюОставить заявкуКарта сайта
Разработка, поддержка, раскрутка сайтов
Звоните:
(916) 728-60-20
Не смогли дозвониться?


Делаем правильные сайты

Сайт-визитка — от 40 000 р. Хочу бесплатно!
Интернет-магазин — от 60 000 р.

Смотреть примеры | Заказать или оценить сайт!

О создании сайтов

15.12.2008

Решение проблем с кодировкой сайта при отображении в разных браузерах

Ключевые слова: кодировка, charset, браузер

Полезная статья? — можете поделиться ссылкой или оставить комментарий

Ссылка на статью для размещения на сайте или блоге:

Выделите текст и нажмите на Ctrl+C, чтобы скопировать выделенный текст
Ссылка на статью для размещения на форуме:

Выделите текст и нажмите на Ctrl+C, чтобы скопировать выделенный текст

Попробуем вместе c вами разобраться в причинах, по которым может "слетать" кодировка страниц при просмотре сайта в тех или иных браузерах. И даже в результатах поиска по вашему сайту в поисковых системах

Начальные данные

  1. Возьмём в качестве примера наш сайт: www.vashmaster.ru
  2. Все тексты сайта написаны и размещены на сайте в кодировке "windows-1251" и об этом браузеру не сообщается
  3. Сервер хостинга автоматически по умолчанию отправляет следующий заголовок:
    Content-Type: text/html; charset=utf-8

При подобном несовпадении в реальной кодировке сайта и информации о кодировке в заголовке, отправляемом сервером, возникнут проблемы отображения страниц сайта в браузере посетителей.

Правильная кодировка - это очень важно!

Попробуем объяснить почему.

При описанных выше настройках, браузер пользователя не сможет автоматически определить в какой же кодировке написаны тексты на просматриваемом сайте. И скорее всего будет отображать страницы в нечитаемых "кракозябрах". Если вы столкнулись с подобным "недопониманием" между браузером и вашим сайтом, то в срочном порядке необходимо принять соответствующие меры. Иначе, это с большой вероятностью приведёт к череде серьёзных проблем.

Во-первых, в подобных условиях и настройках сайта, посетителям придётся постоянно в ручную (методом подбора) указывать браузеру кодировку для отображения сайта. Для этого потребуется сделать несколько лишних кликов мышкой. Но согласитесь, не каждому понравится делать лишних 2-3 клика мышкой, чтобы просто увидеть информацию на странице в читабельном виде. Тем более, что очень многие даже и не знают не только как сменить кодировку отображения в настройках браузера, но и что такое кодировка вообще! Большинство посетителей могут решить что сайт заброшен владельцем или кем-нибудь взломан, и постараются на него больше не возвращаться.

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

Надеюсь, вы осознали, что проблемы с кодировкой могут стать очень серьёзной преградой в функционировании сайта, в его развитии и привлечении на него постоянных посетителей.

Для того, чтобы подобных проблем с кодировкой не возникало, нужно сделать соответствующие настройка как на сервере хостинга, так и на страницах сайта.

Настройки сайта должны быть такими, чтобы любой браузер или любой робот поисковой системы могли ОДНОЗНАЧНО определить в какой кодировке передаётся информация с сайта!

Решение проблемы с кодировкой сайта

Мы уже заметили, что все тексты на нашем сайте написаны и передаются в браузер посетителю сайта в кодировке "windows-1251". Что же сделать, дабы сервер, на котором размещён наш сайт, передавал браузеру в заголовке правильную информацию о кодировке? Давайте действовать по порядку...

1. Чтобы не зависеть от настроек сервера, на всех страницах сайта прямо в коде HTML нужно, используя мета-тег, явно прописать следующую директиву: 

<meta http-equiv="content-type" content="text/html; charset=windows-1251">

Разместить её необходимо на всех страницах, желательно, сразу же после открывающегося тега <head>. Это позволит браузеру автоматически в момент загрузки и интерпретации страницы выбрать правильную кодировку отображения в соответствии с полученной директивой! Одной этой директивы должно быть достаточно для решения нашей проблемы. Но так задумывалось в теории. А на практике, этой директивы не всегда достаточно. В редких случаях, но бывает так, что браузер в качестве кодировки для отображения страницы выбирает не ту, что указана в директиве на самой странице, а ту, что была передана в заголовке от сервера! И если указанная в двух местах информация о кодировке не совпадает, то проблема может остаться.

2. Чтобы сервер отдавал в своём ответе правильную информацию о кодировке, необходимо в корне своего сайта создать файл .htaccess и прописать в нём директиву:

AddDefaultCharset windows-1251

Тогда сервер продолжит по умолчанию отсылать заголовок о кодировке, но название кодировки будет совпадать с действующей на самом сайте. Ни каких несовпадений в названиях уже не будет.

Если файл .htaccess уже существует на вашем сервере, то просто добавьте указанную директиву, например, в самом начале. И ни в коем случае не удаляйте без надобности уже существующую в нём информацию!

Вот и всё решение проблемы. Согласитесь, всё это не так сложно?! Зато очень полезно для профилактики всевозможных проблем с пресловутой кодировкой.

Выполнив последовательно две перечисленные выше рекомендации, браузеры уже точно не смогут ошибиться в автоматическом выборе правильной кодировки отображения информации на вашем сайте. Всё-таки мы указали однозначно, правильно и даже в двух разных директивах информацию о кодировке!

Особые ситуации

Ситуация первая

Создатели сайтов, а чаще даже сами заказчики начинают самовольно и необдуманно вносить определённые доработки на сайт, размещать тексты так как им вздумается ну и т. д. Вплоть до того, что в результате на сайте могут оказаться разделы с информацией в разных кодировках. Не можем сказать, что это правильный подход, но будем отталкивать оттого, что так бывает и всё тут. В таком случае, даже если мы выполним выше перечисленные две рекомендации, всё равно может возникнуть ситуация, когда сервером будет выдаваться информация об одной кодировке, а в коде HTML страницы будет явно прописана уже другая кодировка. В подобном случае, пожалуй, наиболее простым решением будет следующее.

Пропишите в файл .htaccess директиву:

AddDefaultCharset Off

При использовании данной директивы, сервер просто совсем не будет отсылать заголовок с информацией о кодировке передаваемой страницы. Тогда браузеры будут отталкиваться от данных по кодировке, которые указаны явно в коде HTML на самих страницах сайта. При этом на одной странице данные могут быть в кодировке windows-1251, а на другой странице, например в utf-8. Главное, не забыть указать на этих страницах соответствующие мета-теги с информацией о правильной кодировке для распознавания и отображения текста браузером.

Подобное решение хоть и самое простое, но, пожалуй, не самое оптимальное и правильное. По-хорошему, нужно всю информацию на сайте и во всех разделах сайта размещать в одной и той же кодировке! И если есть несколько страниц в другой кодировке, то лучше обновить в них информацию переконвертировав все тексты в требуемую кодировку.

Ситуация вторая

Как известно, большинство сайтов при генерации страниц часть данных выбирают из базы данных, например, MySQL (если сайт написан на языке PHP). Часто, при переносе сайта с одного хостинга на другой, могут возникнуть проблемы из-за несовпадения кодировок между данными, хранящимися в базе данных MySQL, и  данными, хранящимися, например, непосредственно в шаблонах сайта. Таким образом, может возникнуть такая ситуация, что при формировании одной страницы на ней могут оказаться данные в разных кодировках. Пожалуй, это одна из самых грубых возможных ошибок с кодировкой на сайте и её нужно решать сразу же. Иначе, потом могут возникнуть дополнительные сложности при наполнении и редактировании сайта.

Решение подобных разногласий с данными, хранящимися в базе данных, достигается правильной явной установкой настроек кодировки при подключении к базе данных и до выполнения выборок данных из неё. Например, если данные на сайте у нас хранятся в кодировке windows-1251, то и читать данные из базы мы должны в этой же кодировке. Для этого, после выполнения подключения к базе с помощью функции PHP mysql_connect() (или mysql_pconnect()) выполните следующий  запрос SQL:

mysql_query("SET NAMES cp1251");

Данный запрос, сообщает серверу базы данных MySQL, что все данные хранятся и должны передаваться в кодировке cp1251 (именно такое название кодировки используется в MySQL вместо упоминаемого ранее названия windows-1251, которое используется при передачи данных HTML).

Но лучше всего изменить кодировку данных в базе MySql на ту, которая используется и на самом сайте. Тогда серверу базы данных не придётся выполнять лишнюю операцию по перекодировки данных из одного формата в другой.

На заметку

Если вы посетили сайт, у которого по каким-либо причинам сбилась кодировка, но вам очень нужно получить на нём полезную информацию (не дожидаясь, когда разработчики сайта выполнят вышеперечисленные нами рекомендации), то следует в ручную в настройках браузера указать правильную кодировку страницы. Сделать это можно обычно через основное меню браузера: Вид -> Кодировка -> Далее выберите из списка название предполагаемой кодировки страницы. Возможно, чтобы угадать, вам придётся проделать данную процедуру не один раз, выбирая то одно, то другое название из списка кодировок. Чтобы ускорить процесс подбора, рекомендуем перебирать их в следующем порядке: Кириллица (Windows-1251), Кириллица (UTF-8), Кириллица (KOI8-R). Это наиболее часто используемые кодировки на сайтах в Рунете.

Вот, пожалуй, и всё, что нам хотелось поведать вам о проблемах с кодировками и возможных способах их устранения.

Удачи!

Автор: «Ваш МАСТЕР»

Ещё по теме



← Программы для создания сайта

Облако тегов. Ключевые метки. Начало →

Читайте в этом же разделе:

К списку


Комментарии

Если Вы можете качественно дополнить нашу статью, задать интересный вопрос или готовы исправить ошибку, то мы будем только рады. Заранее Вам благодарны!

Оставить свой комментарий к статье

22.04.2009 16:33 | tfox

Великолепная статья :) Нужно всего лишь следить httpaccess и мета-тегом в шаблоне :) Все просто :)

22.05.2009 11:47 | Вячеслав

Помогите пожалуйста!
У меня сайт в UTF-8. Надо сделать форму, чтоб запрос уходил в кодировке 1251
Чтоб менюшка с формой отправляла запрос в отдельный скрипт или на другой сайт который в 1251 и соотв. наоборот.
Нашел такой способ:

Но как всегда IE отличился - не понимает оНо команду accept-charset (((
Гуглить - не помогло.
Как решить задачу?

22.05.2009 20:03 | Вячеслав

Вячеслав, могу предложить несколько вариантов:
1. Если скрипт принимающий данные, ожидает их только в кодировке win1251, то можно попробовать придумать яваскрипт, который перед отправкой формы сразу конвертнёт данные в нужную кодировку.

2. Наиболее правильный подход. Пусть данные отправляются в UTF, но в самом скрипте, который данные принимает, с помощью функции iconv конвертните из UTF в win1251, а потом делайте с ними что хотите, хоть на мыло отсылайте, хоть ещё что-нибудь.

3. Не очень удобный, но тоже выход. Использовать для внедрения формы на сайт ифрейм (iframe), в котором загружать файл в кодировке win1251. Т.е. внедрённая форма, по идее, должна будет работать в кодировке win1251, а остальная часть страницы будет в кодировке UFT. Я так не пробовал, но по логике вещей, должно прокатить.

Удачи.

31.05.2009 16:18 | web_profi

Спасибо за решения.
У меня была проблема с отображением в firefox. Исправил с помощью параметра AddDefaultCharset настройки Apache.
Будьте здоровы ;)

14.10.2010 00:23 | Cools

А как быть если на сайте несколько языков, в том числе русский, и русский язык выводиться знаками вопроса? Причем такая проблема только с данными, которые извлекаются из базы данных? (всё что в шаблоне например отлично по русски выводится) пример можно смотреть на onspot.ru. В БД все таблицы в кодировке windows-1251

14.10.2010 00:53 | Ваш МАСТЕР

Cools, 99%, что для решения проблемы с русской кодировкой, вам нужно выполнить вот этот запрос SQL: mysql_query("SET NAMES cp1251");
Выполнить его нужно после установления соединения с базой данных.

14.10.2010 21:04 | Сools

Спасибо за ответ, но я реально не знаю где конкретно и как определить место установления соединения с БД в скрипте. Как мне определить где имено выпольнить этот запрос? (я не силен в коде ) (((((

14.10.2010 21:08 | Ваш МАСТЕР

Сools, это зависит от того, какой у вас используется движок на сайте. Если вы не сильны в программировании и настройке сайтов, тогда лучше обратиться к специалистам. Например, к нам. Думаю, подобная настройка кодировки будет стоить всего-то рублей 100.

Возможно, у вас есть знакомые программисты сайтов или администраторы, которые тоже знают толк в этом деле. Главное, не поломайте свой сайт ;)

14.10.2010 21:37 | Сools

Вот и давайте позмотрите тогда вы. Я с этим уже замучился. Готов заплатить.

14.10.2010 23:53 | Ваш МАСТЕР

Обращайтесь, укротим ваш сайт. Наши контакты на сайте есть. Ждём вашего выхода на связь.

15.10.2010 14:19 | Ваш МАСТЕР

Сools, проверили ваш сайт. К сожалению, кодировка в базе уже битая. Восстановлению не подлежит. Такое иногда случается, если делать не правильный бекап базы данных при переносе сайта с одного хостинга на другой. Поэтому, данную работу, лучше всё-таки сразу давать профессионалам, а не экспериментировать самому.

Надеемся, что у Вас на старом хостинге ещё остался рабочий сайт или какой-нибудь не битый бекап.

15.01.2011 02:48 | Владимир

Спасибо! Полезная статья.

Если я правильно понял, настроить сервер можно только на одну кодировку. А как лучше поступить, если на сервере хостинга два моих сайта в разных кодировках?
Неизбежно в коде одного из сайтов метатег будет противоречить настройкам сервера.

15.01.2011 19:26 | Ваш МАСТЕР

Владимир, не совсем так. Под сервером имеется в виду настройки хостинга. Для каждого сайта на хостинге можно прописать свою кодировку "по умолчанию". Вот она и должна совпадать с реальной кодировкой сайта.

В принципе, современные серверы определяют кодировку браузера-клиента и автоматически конвертируют в неё передаваемые данные.

18.07.2011 07:27 | Greta

Shoot, who would have tohguht that it was that easy?

18.07.2011 14:16 | irrcvzqxj

7Hy5Z4 qngqpbqvycxr

19.07.2011 21:10 | xqizkhbk

dQwBMs , [url=http://xofydnjelhgf.com/]xofydnjelhgf[/url], [link=http://fxuexdlmoyod.com/]fxuexdlmoyod[/link], http://iwygcfebcmvt.com/

20.07.2011 14:07 | kayffj

Xcp87S tyuumyfseoav

22.07.2011 16:32 | qrsbornnyw

SfSU5o , [url=http://xymwlrocqkmx.com/]xymwlrocqkmx[/url], [link=http://dprxofbbcjyk.com/]dprxofbbcjyk[/link], http://sdupsslscziu.com/

26.10.2011 22:48 | Sergey

универсальный код для отправки и приема данных mysql

$db=mysql_connect("localhost","alex","12345");
mysql_select_db("first",$db);
mysql_query ("set character_set_client='cp1251'");
mysql_query ("set character_set_results='cp1251'");
mysql_query ("set collation_connection='cp1251_general_ci'");

08.11.2011 03:39 | Елена

Спасибо, так вроде все понятно и все что касается meta тегов соблюдено. Сайт в win-1251 (прописано на всех страницах) и при проверке в большинстве браузерах выдает нормально. Но вот есть сомнения, так как ответ сервера Content-Type: text/html и больше ничего и при анализе на cy-pr.com выдает: Кодировка сервера / страницы: Неверная кодировка / windows-1251 (Cyrillic)(это если проверять с www), а без все соответствует. Что бы это значило. Может здесь и есть дело в настройках хостинка? Плиз на e-mail.(www.stroi-montag-plus.ru)

12.12.2011 15:22 | T&K

Сталкнулся с такой проблемой, часть текста отображается не правильно но только в IE в других браузерах все нормально, как решить всю голову сломал не пойму.

Вот пример:

http://clip.gamatic.ru/s/1323688109-35009b.png
и тут

http://clip.gamatic.ru/s/1323688178-22685b.png

26.12.2011 21:35 | Светлана Ковалева

Спасибо, помогло! Метатег прописала и всё случилось!

17.01.2012 10:10 | Нина

Огромное спасибо за статью! Была в шоке когда открыла созданный сайт в другом браузере. Теперь все норм!!!

19.01.2012 22:08 | Анастасия

Шикарно написано. Огромное спасибо "нашему МАСТЕРУ". Не в каждом руководстве так подробно опишут.

09.02.2012 16:24 | Константин

народ помогите! Наш сайт http://vip-treker.ru штото глюканул, посоветуйте што можно сделать, а то я весь на измене не пойму што и случилось

09.02.2012 16:29 | Константин

народ помогите! Наш сайт http://vip-treker.ru/ что-то тупонул, посоветуйте что можно сделать, а то я весь на измене, не пойму что и случилось...

25.03.2012 18:24 | Alex

Очень полезная статья, благодарю автора. Мне она пришла на помощь как раз вовремя!!!


При любом использовании информации веб-сайта
гиперссылка на «Ваш МАСТЕР» обязательна!

О создании сайтов

Проверка сайта в разных браузерах

Как восстановить пароль к админке сайта

Закладки обманчивы

Магазины, дружащие с Яндекс.Маркет

ТОП 10 самых раздражающих факторов для программиста

Какого буя PHP 5.3 не имеет обратной совместимости?

О продвижении сайтов

Домены ru ,com, biz, info - есть ли разница для продвижения?

Защита от нечестных приемов в контекстной рекламе

Фильтр Аффилиат. Как избавиться?

Яндекс.Маркет начинает размещать офлайн-магазины

О программах

Вышел легковесный веб-браузер Rekonq 0.7

Как узнать IP-адрес сайта?

Найти все сайты на одном IP

Возможности интеграции с Mail.Ru

События

Специалисты по взлому создали вредоносный гаджет

Хакеры взломали сайт ЦРУ США

У сервиса Skype произошли новые сбои в работе

Сервис WebVisor.ru прекращает работу


Свежие комментарии

Редирект. Примеры переадресации сайтов
спасибо!!!

Поиск и замена текста. Методы решения
Как менять строку в дампах понятно. Но ПОЧЕМУ БЫЛО НЕ НАПИСАТЬ ТУТ запрос, которым это можно сделать без дампов? Извините, если база многомегабайтная, то дампить/аплоудить гораздо сложнее, чем

Сброс пароля у пользователя root к базе MySql
Какие-то способы у вас ненадежные. Выше версии 4.1 MySQL в таблице data\mysql\user.MYD сразу после localhost.root прибить "*" (поставить 00 вместо нее в любом хексаедите) = нет пароля. И так с

Вирус на сайте? Как его найти и удалить
Я знаю, на какой странице сайта вордпресс есть вредоносный код, как мне эту страницу найти через фтп клиент, чтобы отредактировать? Подскажите пожалуйста...

Услуги команды
«Ваш МАСТЕР»
Rambler's Top100