Как правильно задать кодировку для страницы и сайта в целом?
Доброго времени суток, уважаемые читатели блога Site on! Сегодня речь пойдёт о такой мелочи, как кодировка страниц наших с вами сайтов на Joomla, WordPress и вовсе без CMS. Несмотря на то, что в этом нет ничего сложного, множество людей до сих пор задают вопросы на форумах, связанные с этой проблемой.
Сейчас самой распространённой кодировкой по праву считается UTF-8 и чтобы не растягивать статью не нужными разглагольствованиями просто скажу, что я абсолютно всем рекомендую использовать именно её.
Как изменить кодировку страницы?
Теперь, когда мы знаем, какая кодировка нам нужна, первым делом нужно сохранить все файлы, которые нужно перекодировать в UTF-8 без BOM, это можно сделать с помощью большинства текстовых редакторов для программистов (не Microsoft Office), например, PSPad или Notepad++, а также множество других.
Перекодирование в UTF-8 на примере PSPad
Если Вы используете бесплатный редактор PSPad, то всё что вам необходимо, это открыть в нём нужный файл, выбрать из верхнего меню «Формат» и выбрать из выпавшего списка UTF-8, после чего обратите внимание на смену кодировки в нижнем правом углу вашего окошка с PSPad, незабываем сохранить изменения!
Как правильно указать нужную кодировку?
Данную статью можно было бы поместить в раздел PHP, так как именно PHP играет в нашем спектакле самую значимую роль. Всегда указывайте кодировку страниц ваших сайтов прежде всего через PHP заголовок:
который должен быть как можно выше в вашем коде, обязательно перед первым выводом любого символа на странице (в том числе HTML теги, просто буквы, пробелы). Данный способ является наиболее приоритетным, в то время как мета-тег: Просто ещё раз подчёркивает и объявляет (а не назначает!) принадлежность к той или иной кодировке, но никак не говорит серверу посылать документы именно в данной кодировке, в отличие от PHP. Именно PHP говорит серверу, на котором находится ваш сайт, в какой кодировке послать страницу клиенту. Так же это можно делать и с помощью .htaccess – файла тонкой конфигурации веб-сервера Apache, но лично мне больше импонирует вариант с PHP. Тем более я слышал, что не все хостеры предоставляют конфигурацию с помощью .htaccess, слава богу не сталкивался 🙂
Итак, после того как мы пересохранили все нужные нам файлы в UTF-8 без BOM и указали кодировку с помощью PHP, остаётся лишь «подтвердить» её мета тегом, который также обязательно нужно указывать! Это рекомендует сам W3C для того, чтобы устройства, роботы и клиентские браузеры могли безошибочно определить, в какой кодировке ваш сервер послал страницу.
Как поменять кодировку страниц в Joomla?
Давайте рассмотрим пример правильного указания кодировки на Joomla 2.5 Это вовсе не сложно и займёт менее минуты:
1) Заходим в главный файл нашего шаблона сайта под названием index.php. Он находится по адресу: /templates/ваш_шаблон/index.php
2) Перекодируем этот файл с помощью текстового редактора для программистов, как было описано для PSPad.
3) Сразу после строки, которая предотвращает прямое обращение к файлу пишем код, который пошлёт заголовок с нашей кодировкой: Если у вас возникли трудности с поиском данной строки, то можете вставить код просто в самом вверху, например, первой строкой файла, главное не забудьте, что PHP код всегда должен быть размещён внутри конструкции <?php ваш код ?> В нашем случае:
4) Не забываем проверить, что Joomla поставила правильный мета-тег:
В Joomla 2.5 за вывод мета-тегов и прочей информации, заключённой в «голове» нашего сайта, отвечает следующая конструкция:
Как поменять кодировку страниц в WordPress и других CMS?
Для сайтов на WordPress и любых других сайтов смысл остаётся точно таким же. Вы находите основной файл, отвечающий за вывод информации на вашем сайте, перекодируете его в UTF-8 без BOM, указываете PHP заголовок и мета-тег.
Исключения составляют сайты на чистом HTML, где PHP кода не может быть в принципе. Для таких сайтов можно просто пропустить данный шаг.
Вот и всё на сегодня, спасибо за ваше внимание и до встречи в новых статьях блога о самостоятельном создании и продвижении сайтов – Site on!
Как поменять кодировку на сайте
Меня несколько раз просили написать, как поменять кодировку на сайте. Дело это состоит из нескольких частей, поэтому в двух словах не объяснить. И я принял решение написать эту статью, в которой чётко расписать, что требуется для смены кодировки на сайте.
Давайте с Вами будем переводить сайт в кодировку UTF-8. Если Вы хотите перевести в любую другую кодировку, то всё будет аналогично. Итак, вот порядок действий для этого:
- Все текстовые файлы (html, php, js, txt, в общем, в которых есть текст) перекодируйте в UTF-8. Сделать это очень просто через Notepad++ в пункте «Преобразовать в UTF-8 без BOM» из меню «Кодировки«. Причём именно все файлы, которые даже ничего не выводят на страницу.
- Поместите в корень сайта файл .htaccess с текстом AddDefaultCharset UTF-8.
- Поменяйте кодировку в мета-теге <meta http-equiv=»Content-type» content=»text/html; charset=utf-8″ />
Если Ваш сайт не использует базу данных, то на этом этапе можно закончить менять кодировку. Но если база данных есть, то нужно сделать ещё и следующие шаги:
- Сразу после подключения к БД выполните запрос: SET NAMES UTF-8
- В phpMyAdmin поменяйте кодировку базы данных на utf8_general_ci в её настройках.
- Поставьте у всех таблиц кодировку utf8_general_ci.
- У всех текстовых типов полей так же поставьте кодировку utf8_general_ci.
Всё, теперь Ваша кодировка на сайте изменена. Добавлю лишь, что если где-то в коде Вы занимались преобразованием из одной кодировки в другую (например, через функцию iconv()), то тщательно проверьте это место, возможно, там появится проблема.
Если после смены кодировки у Вас что-то отображается не так, то почитайте эту статью: проблемы с кодировкой.
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Она выглядит вот так:
Комментарии ( 11 ):
Молодец Михаил урок очень полезный.Люблю когда коротко и ясно а не наоборот. Спасибо!
просто класно понятно и ещлково спасибо
Здравствуйте Михаил, вот я опробовал, то что вы написали, только с кодировкой windows-1251. Прямо все способы разом применил, вот только все равно вылетали кракозябры. Но вдруг я случайно в файле .htaccess указал кодировку utf-8 и все заработало, нет кракозябр (притом в базе данных и в скрипте у меня кодировка windows-1251). Не могли бы вы мне ответить, почему? (если, конечно этому есть объяснение)
Значит, файлы всё-таки в UTF-8 были. И из базы данных данные тоже поступали с кодировкой UTF-8 (по умолчанию, она и стоит на denwer).
Здравствуйте.Срочно нужна ваша помощь. Выходили крокозябры. решил перекодировать под UTF-8 по вашим указаниями. На 2 или 3 пункте я что-то не так сделал(скорее всего на 3) и у меня сайт перестал работать. Вводя ссылку, у меня пишет текст из index.php
Добрый день. Такая проблема. У меня база данных изначально в кодировке cp1251. База для скрипта почтовой рассылки. Сайт, где внедрен скрипт — в кодировке utf8. Все, что написано в данной статье (по изменению кодировки в базе данных) я сделал. И, все равно, происходит следующее: пользователь, желающий оформить подписку на сайте, после того, как ввел в форму свои имя и e-mail, получает письмо (чтоб подтвердить рассылку), где его имя написано кракозябрами, и далее (после подтверждения) в таком виде и остается в базе данных. Если же меняю кодировку сайта на windows1251 — все хорошо, имя человеческое. Но я не хочу менять кодировку сайта. Как быть? Может быть, есть возможность как-то поменять кодировку отдельно взятого элемента, в данном случае, кодировку формы отправки данных? Спасибо.
Убедитесь, что в письме есть заголовок Content-type с кодировкой utf-8.
Прошу простить, но я совсем плохо знаком с php. Вот такой у меня код отправки. Скажите, что и где нужно поменять? http://jsfiddle.net/w2fes/
Уважаемый Дмитрий,проверьте,пожалуйста,вот эту строчку с параметрами windows-1251 и utf-8. $headers .= "Content-type: text/plain; charset=windows-1251\r\n"; если не поможет,то будем разбираться
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Изменение кодировки сайта в файле .htaccess
Кодировка сайта меняется вручную в том случае, если браузер выбирает неверный вариант кодировки, итогом чего становится появление набора символов, вместо обычного вида веб-страницы. Например, для чтения файлов используется Windows-1251, из-за чего возникают проблемы с ресурсами, на которых используется кодировка UTF-8, которая является стандартной для большинства сайтов.
Как узнать кодировку сайта
Посмотреть кодировку сайта легко — достаточно перейти на любую страницу ресурса и нажать правую кнопку мыши (или сочетание клавиш CTRL+U ), чтобы посмотреть исходный код («View page source» или « Просмотр кода страницы »).
Для поиска нужного мета-тега в коде вызовите функцию поиска сочетанием CTRL+F . Затем в строку поиска необходимо ввести « charset », чтобы отыскать нужное значение.
Общий способ
Одной из наиболее часто встречающихся причин считается неправильно прописанный мета-тег content-type :
Но если после его изменения ничего не меняется, и браузер не считает тег основополагающим, понадобится поменять значение вручную.
Редактирование файла .htaccess
Существует несколько способов, как сменить кодировку в файле .htaccess
На всем сайте
Изменить кодировку сайта целиком можно через .htaccess — файл конфигурации, отвечающий за настройку работы веб-сервера Apache.
Принцип редактирования один для всех панелей управления, но для примера рассмотрим одну из них — ISPmanager. Для изменения кодировки через .htaccess в данной панели управления нужно:
-
- Авторизоваться в панели управления в ISPmanager.
- Перейти в раздел «Менеджер файлов». Далее перейти в папку «www» и войти в корневую папку WWW-домена (папка с названием сайта).
- Выбрав в списке файл .htaccess, нажать на кнопку «Редактировать» → «Открыть».
- После этого можно редактировать файл самостоятельно.
- Для изменения на стандартный вариант UTF-8, нужно добавить строчку:
- Внесение изменений необходимо подтвердить, нажав на кнопку «Сохранить».
Возможно и обратное изменение для которого добавляется:
В отдельном файле или группе файлов
В некоторых случаях указать кодировку в .htaccess необходимо только для одного файла. Для этого понадобится открыть файл .htaccess в текстовом редакторе и добавить в него следующий блок:
В результате, директива AddCharset будет конвертировать указанный файл ( file.html ) в заданную кодировку ( UTF-8 ).
Этого же результата можно достичь, пользуясь директивой ForceType :
Для внесения изменений кодировки в несколько файлов одновременно, их имена указываются при помощи синтаксиса регулярных выражений.
При комплексных сценариях, применяющихся к одному документу, придется учесть порядок расположения расширений. Например:
Кодировки и веб-страницы
Возвращаясь к избитой проблеме с кодировками русских букв, хотелось бы иметь под рукой некий единый справочник или руководство, в котором можно найти решения различных сходных ситуаций. В своё время сам перелопатил множество статей и публикаций, чтобы находить причины ошибок. Задача этой публикации — сэкономить время и нервы читателя и собрать воедино различные причины ошибок с кодировками в разработке на Java и JSP и способы их устранения.
Варианты решения могут быть не единственными, охотно добавлю предложенные читателем, если они будут рабочими.
Итак, поехали.
1. Проблема: при получении разработанной мной страницы браузером весь русский текст идёт краказябрами, даже тот, который забит статически.
Причина: браузер неверно определяет кодировку текста, потому что нет явного указания.
Решение: явно указать кодировку:
a) HTML: добавляем тэг META в хидер страницы:б) XML: указываем кодировку в заголовке:
в) JSP — задаём тип контента в заголовке:
г) JSP — задаём кодировку возвращаемой страницы
д) Java — устанавливаем хидер ответа:
2. Проблема: написанный в JSP-странице статический русский текст почему-то идёт краказабрами, хотя кодировка страницы задана.
Причина: статический текст был написан в кодировке, отличной от заданного странице.
Решение: изменить кодировку в редакторе (например, для AkelPad нажимаем «Сохранить как» и выбираем нужную кодировку).3. Проблема: получаемый из запроса текст идёт кракозябрами.
Причина: кодировка запроса отличается от используемой для его обработки кодировки.
Решение: установить кодировку запроса или перекодировать в нужную.
а) Java, со стороны отправителя не задана нужная кодировка — перекодируем в нужную:Примечание: кодировка ISO-8859-1 устанавливается по умолчанию, если не была задана другая.
б) Java, со стороны отправителя задана нужная кодировка — устанавливаем кодировку запроса:4. Проблема: отправленный GET-параметром русский текст при редиректе приходит кракозябрами.
Причина: упаковка русского текста в URI по умолчанию идёт в ISO-8859-1.
Решение: упаковать текст в нужной кодировке вручную.
а) JSP, URLEncoder:5. Проблема: текст из базы данных читается кракозябрами.
Причина: кодировка текста, прочитанного из базы данных, отличается от кодировки страницы.
Решение: установить соответствующую кодировку страницы, либо перекодировать полученные из базы данных значения.
а) Java, перекодирование считанной в db_string базы данных строки:6. Проблема: текст записывается в базу данных кракозябрами, хотя на странице отображается правильно.
Причина: кодировка записываемой строки отличается от кодировки сессии работы с базой данных, либо от кодировки базы данных (стоит помнить, что они не всегда совпадают).
Решение: установить необходимую кодировку сессии или перекодировать строку.
а) Java, перекодирование записываемой строки db_string в кодировку сессии или базы данных:б) Java, MySQL, настройка параметров подключения в строке dburl, передаваемой функции коннекта:
в) MySQL, настройка параметров подключения в XML-описателе контекста, добавляем атрибут к тегу \<Resource\>:
г) MySQL, прямая установка кодировки сессии вызовом SET NAMES (connect — объект подключения Connection):
7. Проблема: если ничего не помогло…
Решение: всегда остаётся самый «топорный» метод — прямое перекодирование.
а) Для известной кодировки источника:
[String MyValue = new String(source_string.getBytes(«utf-8″),»cp1251»);]б) Для параметра запроса:
[String MyValue = new String(request.getParameter(«MyParam»).getBytes(request.getCharacterEncoding()),»cp1251″);]Дополнение, или что нужно знать:
1. Кодировки базы данных и сессии подключения могут различаться, в зависимости от конкретной СУБД и драйвера. К примеру, при подключении к MySQL стандартным драйвером com.mysql.jdbc.Driver без явного указания кодировка сессии устанавливалась в UTF-8, несмотря на другую кодировку схемы БД.
2. Кодировка упаковки строки запроса в URI по умолчанию устанавливается в ISO-8859-1. С подобным можно столкнуться, например, при передаче явно заданного текста в редиректе с одной страницы на другую.
3. Взаимоотношения кодировок страницы, базы данных, сессии, параметров запроса и ответа не зависят от языка разработки и описанные для Java функции имеют аналоги для PHP, Asp и других.Примечание: восстановить ссылки на источники нет возможности, все примеры взяты из собственного кода, хотя когда-то так же выискивал их по многочисленным форумам.
Надеюсь, этот небольшой обзор поможет начинающим веб-программистам сократить время отладки и сберечь нервы.