Как изменить кодировку на сайте htaccess

Как задать кодировку файла в htaccess. Пример явного указания кодировки в файле htaccess.

Как задать кодировку в htaccess

Одна из самых частых проблем сайта — это его кодировка. И несмотря на это многие Web-мастера продолжают утверждать, что браузер сам выбирает кодировку. Действительно, он выбирает кодировку сам, но делает это не всегда правильно. Вот это и есть самая распространнёная ошибка с кодировкой: сайт в кодировке, допустим, UTF-8, а браузер настойчиво выбирает windows-1251. Вот как задать жёстко кодировку через файл htaccess, я расскажу в этой небольшой статье.

Для того, чтобы задать кодировку файла в htaccess достаточно написать в нём всего одну строчку:

AddDefaultCharset UTF-8

Если Вам нужна windows-1251, то тогда так:

AddDefaultCharset WINDOWS-1251

Всего одна строчка и теперь браузер, независимо от своего предпочтения, будет выбирать указанную кодировку. Сразу говорю, данный способ — это действительно мощный. Вы должны понимать, что раз браузер неправильно распознаёт кодировку Вашего сайта (игнорируя даже мета-тег «ContentType«), значит, на то есть свои причины, поэтому внимательно проверьте: везде ли всё хорошо отображается.

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

  • Создано 09.07.2011 16:32:47


  • Михаил Русаков

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Как кодировка влияет на отображение сайта, чем отличается UTF-8 от Windows 1251 и где указать кодировку.

В статье:

  1. Зачем нужна кодировка

  2. Виды кодировок

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

  4. Если кодировка не отображается

  5. Где указать кодировку сайта

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

Зачем нужна кодировка

Кодировка (Charset) — способ отображения кода на экране, соответствие набора символов набору числовых значений. О ней сообщает строка Content-Type и сервер в header запросе.

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

На сайте слетела кодировка, пример

Студентка списывала реферат с формулами, а на сайте слетела кодировка. Реальная история

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

Кодировка влияет на SEO?

Разберемся, как кодировка на сайте влияет на индексацию в Яндекс и Google.

Яндекс четко заявляет:

«Тип используемой на сайте кодировки не влияет на индексирование сайта. Если ваш сервер не передает в заголовке кодировку, робот Яндекса также определит ее самостоятельно».

Позиция Google такая же. Поисковики не рассматривают Charset как фактор ранжирования или сигнал для индексирования, тем не менее, она косвенно влияет на трафик и позиции.

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

Некорректно указана кодировка на сайте

Пример страницы со слетевшей кодировкой

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

Виды кодировок

Существует довольно много видов, но сейчас распространены два:

UTF-8

Unicode Transformation Format — универсальный стандарт кодирования, который работает с символами почти всех языков мира. Символы могут занимать от 1 до 4 байт, такое кодирование позволяет создавать мультиязычные сайты.

Есть несколько вариантов — UTF-8, 16, 32, но чаще используют восьмибитное.

Windows-1251

Этот вид занимает второе место по популярности после UTF-8. Windows-1251 — кодирование для кириллицы, созданное на базе кодировок, использовавшихся в русификаторах операционной системы Windows. В ней есть все символы, которые используются в русской типографике, кроме значка ударения. Символы занимают 1 байт.

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

Определить кодировку страницы своего или чужого сайта можно через исходный код страницы. Откройте страницу сайта, выберите «Просмотр кода страницы» (сочетание горячих клавиш Ctrl+U» в Google Chrome) и найдите упоминание «charset» внутри тега head.

На странице сайта используется кодировка UTF-8:

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

Указание кодировки в коде страницы

Узнать вид кодирования можно с помощью «Анализа сайта». Сервис проверяет в том числе и техническую сторону ресурса: анализирует серверную информацию, определяет кодировку, проверяет редиректы и другие пункты.

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

Фрагмент анализа серверной информации сайта

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

Проверка кодировки на сайте

Отчет о технических данных
Проверить корректность кодировки онлайн
Кодировка сервера и страницы

Проверить кодировку еще можно через сервис Validator.w3, о котором писали в статье о проверке валидации кода. Нужная надпись находится внизу страницы.

Сервис для проверки кодировки на сайте

Кодировка сайта в валидаторе

Если валидатор не обнаружит Charset, он покажет ошибку:

Некорректная кодировка, пример

Ошибка указания кодировки

Но валидатор работает не точно: он проверяет только синтаксис разметки, поэтому может не показать ошибку, даже если кодирование указано неправильно.

Если кодировка не отображается

Если вы зашли на чужой сайт с абракадаброй, а вам все равно очень интересно почитать контент, то в Справке Google объясняют, как исправить кодирование текста через браузер.

О проблеме возникновения абракадабры на вашем сайте будут сигнализировать метрики поведения: вырастут отказы, уменьшится глубина просмотров. Но скорее всего вы и раньше заметите, что что-то пошло не так.

Главное правило — для всех файлов, скриптов, баз данных сайта и сервера должна быть указана одна кодировка. Ошибка может возникнуть, если вы случайно указали на сайте разные виды кодировки.

Яндекс советует использовать одинаковую кодировку для страниц и кириллических адресов структуры. К примеру, если робот встретит ссылку href=»/корзина» на странице с кодировкой UTF-8, он сохранит ее в этом же UTF-8, так что страница должна быть доступна по адресу «/%D0%BA%D0%BE%D1%80%D0%B7%D0%B8%D0%BD%D0%B0».

Где указать кодировку сайта

Если проблема возникла на вашем сайте, способ исправления зависит от вида сайта. Для одностраничника достаточно указать кодировку в мета-теге страницы, а для большого сайта есть разные варианты:

  • кодировка в мета-теге;
  • кодировка в .htaccess;
  • кодировка документа;
  • кодировка в базе данных MySQL.

Кодировка в мета-теге

Добавьте указание кодировки в head файла шаблона сайта.

При создании документа HTML укажите тег meta в начале в блоке head. Некоторые браузеры могут не распознать указание кодировки, если оно будет ниже.

Мета-тег может выглядеть так:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

или так:

<meta charset="utf-8">

В HTML5 они эквивалентны.

Где указывать кодировку на сайте

Тег кодировки в HTML

В темах WordPress обычно тег «charset» с кодировкой указан по умолчанию, но лучше проверить.

Кодировка в файле httpd.conf

Инструкции для сервера находятся в файле httpd.conf, обычно его можно найти на пути «/usr/local/apache/conf/».

Если вам нужно сменить кодировку Windows-1251 на UTF-8, замените строчку «AddDefaultCharset windows-1251» на «AddDefaultCharset utf-8».

Осторожнее: если вы измените в файле кодировку по умолчанию, то она изменится для всех проектов на этом сервере.

Убедитесь, что сервер не передает HTTP-заголовки с конфликтующими кодировками.

Кодировка в .htaccess

Добавьте кодировку в файл .htaccess:

  1. Откройте панель управления хостингом.
  2. Перейдите в корневую папку сайта.
  3. В файле .htaccess добавьте в самое начало код:
    1. для указания кодировки UTF-8 — AddDefaultCharset UTF-8;
    2. для указания кодировки Windows-1251 — AddDefaultCharset WINDOWS-1251.
  4. Перейдите на сайт и очистите кэш браузера.

Кодировка документа

Готовые файлы HTML важно сохранять в нужной кодировке сайта. Узнать текущую кодировку файла можно через Notepad++: откройте файл и зайдите в «Encoding». Меняется она там же: чтобы сменить кодировку на UTF-8, выберите «Convert to UTF-8 without BOOM». Нужно выбрать «без BOOM», чтобы не было пустых символов.

Кодировка Базы данных

Выбирайте нужную кодировку сразу при создании базы данных. Распространенный вариант — «UTF-8 general ci».

Где менять кодировку у БД:

  1. Кликните по названию нужной базы в утилите управления БД phpMyAdmin и откройте ее.
  2. Кликните на раздел «Операции»:
  3. Введите нужную кодировку для базы данных MySQL:
  4. Перейдите на сайт и очистите кэш.

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

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

Проблема может не решиться, если все дело в кодировке подключения к базе данных. Что делать:

  1. Подключитесь к серверу с правами mysql root пользователя:
    mysql -u root -p
  2. Выберите нужную базу:
    USE имя_базы;
  3. Выполните запрос:
    SET NAMES ‘utf8’;

Если вы хотите указать Windows-1251, то пишите не «utf-8», а «cp1251» — обозначение для кодировки Windows-1251 у MySQL.

Чтобы установить UTF-8 по умолчанию, откройте на сервере my.cnf и добавьте следующее:

В области [client]:

default-character-set=utf8

В области [mysql]:

default-character-set=utf8

В области [mysqld]:

collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'

character-set-server = utf8

Вы когда-нибудь сталкивались с проблемами кодировки на сайте?

В данной статье сведен перечень приемов для правильной работы сайта в кодировке UTF-8.

1

В .htacces

AddDefaultCharset UTF-8
AddCharset utf-8 .css .js .json .rss .xml

htaccess

2

Кодировка файлов

Кодировка файлов PHP – «UTF-8 без BOM». Если сохраните с ним, то в файлах, где отправляются заголовки будет ошибка.

Для файлов .htacess кодировка должна быть ANSI, иначе будет ошибка 500.

3

В HTML

Также кодировка файлов – UTF-8 и мета-тег в <body>:

<meta http-equiv="content-type" content="text/html; charset=utf-8">

HTML

или

<meta charset="utf-8">

HTML

4

В index.php

header('Content-type: text/html; charset=utf-8');
setlocale(LC_ALL, 'ru_RU.UTF-8');

PHP

5

mb_string

При обработке строковых данных использовать функции из mb_string, стандартные с UTF-8 работают некорректно. Например strlen() возвращает неверное количество символов если в строке есть русские буквы.

Настройки mb_string в index.php:

mb_internal_encoding('UTF-8');
mb_regex_encoding('UTF-8');
mb_http_input('UTF-8');
mb_http_output('UTF-8');
mb_language('uni');

PHP

Или в .htaccess:

php_value  mbstring.internal_encoding "UTF-8"
php_value  mbstring.regex_encoding    "UTF-8"
php_value  mbstring.http_input        "UTF-8" 
php_value  mbstring.http_output       "UTF-8" 
php_value  mbstring.language          "uni"

htaccess

Также во избежании проблем с кодировкой письма отправлять через функцию mb_send_mail().

6

База данных

Кодировка таблиц MySQL в utf8_general_ci, после соединения с БД сделать запрос:

I am using a hosting company and it will list the files in a directory if the file index.html is not there. It uses ISO 8859-1 as the default encoding.

If the server is Apache, is there a way to set UTF-8 as the default instead?

I found out that it is actually using a DOCTYPE of HTML 3.2 and then there is not charset at all… so it is not setting any encoding. But is there a way to change it to use UTF-8?

Peter Mortensen's user avatar

asked May 27, 2009 at 4:04

nonopolarity's user avatar

nonopolaritynonopolarity

144k129 gold badges453 silver badges724 bronze badges

1

In httpd.conf add (or change if it’s already there):

AddDefaultCharset utf-8

answered May 27, 2009 at 4:11

MartinodF's user avatar

8

Add this to your .htaccess:

IndexOptions +Charset=UTF-8

Or, if you have administrator rights, you could set it globally by editing httpd.conf and adding:

AddDefaultCharset UTF-8

(You can use AddDefaultCharset in .htaccess too, but it won’t affect Apache-generated directory listings that way.)

answered Jun 7, 2012 at 6:44

Mathias Bynens's user avatar

Mathias BynensMathias Bynens

142k52 gold badges215 silver badges246 bronze badges

7

See AddDefaultCharset Directive, AddCharset Directive, and this article.

AddDefaultCharset utf-8

But I have to use Chinese characters
now and then. Previously, I translated
Chinese characters to Unicode code and
include it in the document using the
&# hack. But it is only useful for
page having a few characters.

There is a better way to do that:
encode the charset information in the
filename, and apache will output the
proper encoding header based on that.
This is possible thanks to the
AddCharset lines in the conf file,
such as the line below:

conf/httpd.conf:

AddCharset UTF-8 .utf8

So if you have a file whose
names ends in .html.utf8, apache will
serve the page as if it is encoded in
UTF-8 and will dump the proper
character-encoding directive in the
header accordingly.

answered May 27, 2009 at 4:11

Eugene Yokota's user avatar

Eugene YokotaEugene Yokota

94k45 gold badges212 silver badges315 bronze badges

In file .htaccess, add this line:

AddCharset utf-8 .html .css .php .txt .js

This is for those that do not have access to their server’s configuration file. It is just one more thing to try when other attempts failed.

As far as performance issues regarding the use of file .htaccess, I have not seen this. My typical page load times are 150-200 ms with or without file .htaccess.

What good is performance if your page does not render correctly? Most shared servers do not allow user access to the configuration file which is the preferred place to add a character set.

Peter Mortensen's user avatar

answered Aug 12, 2014 at 3:09

Misunderstood's user avatar

MisunderstoodMisunderstood

5,4281 gold badge17 silver badges25 bronze badges

7

On Ubuntu 12.04, it’s sufficient to uncomment the line AddDefaultCharset UTF-8 in /etc/apache2/conf.d/charset. If you’re using upstream Apache, the file may be called httpd.conf, and you may have to insert the line.

answered Mar 6, 2013 at 16:49

Bjartur Thorlacius's user avatar

3

For completeness, on Apache2 on Ubuntu, you will find the default charset in charset.conf in conf-available.

Uncomment the line

AddDefaultCharset UTF-8

answered Aug 26, 2014 at 0:27

David Glance's user avatar

2

This is untested, but it will probably work.

In your .htaccess file, add:

<Files ~ ".html?$">  
     Header set Content-Type "text/html; charset=utf-8"
</Files>

However, this will require mod_headers on the server.

Peter Mortensen's user avatar

answered May 27, 2009 at 4:09

MiffTheFox's user avatar

MiffTheFoxMiffTheFox

21.1k14 gold badges67 silver badges94 bronze badges

3

Just a hint if you have long filenames in UTF-8 format: by default they will be shortened to 20 bytes, so it may happen that the last character might be «cut in half» and therefore unrecognized properly. Then you may want to set the following:

IndexOptions Charset=UTF-8 NameWidth=*

NameWidth setting will prevent shortening your file names, making them properly displayed and readable.

As other users already mentioned, this should be added either in httpd.conf or apache2.conf (if you do have admin rights) or in .htaccess (if you don’t).

Peter Mortensen's user avatar

answered May 3, 2016 at 20:40

pstryk's user avatar

pstrykpstryk

1,8951 gold badge12 silver badges11 bronze badges

1

Where all the HTML files are in UTF-8 and don’t have meta tags for content type, I was only able to set the needed default for these files to be sent by Apache 2.4 by adding both directives:

AddLanguage ru .html
AddCharset UTF-8 .html

hon2a's user avatar

hon2a

6,8605 gold badges44 silver badges54 bronze badges

answered Dec 11, 2014 at 7:59

Alex's user avatar

Just leave it empty: 'default_charset' in WHM :::::: default_charset =''

P.S.: In WHM, go → HomeService ConfigurationPHP Configuration Editor → click ‘Advanced Mode’ → find ‘default_charset’ and leave it blank. Just nothing, not UTF-8 and not ISO.

Peter Mortensen's user avatar

answered Nov 4, 2016 at 9:55

grrow's user avatar

grrowgrrow

313 bronze badges

1

<meta charset=’utf-8′> overrides the Apache default charset (cf /etc/apache2/conf.d/charset)

If this is not enough, then you probably created your original file with the ISO 8859-1 encoding character set. You have to convert it to the proper character set:

iconv -f ISO-8859-1 -t UTF-8 source_file.php -o new file.php

Peter Mortensen's user avatar

answered Oct 22, 2020 at 16:37

Gaby's user avatar

GabyGaby

111 silver badge4 bronze badges

In my case I added this to file .htaccess:

AddDefaultCharset off
AddDefaultCharset windows-1252

Peter Mortensen's user avatar

answered Jan 11, 2020 at 19:15

Ruslan Novikov's user avatar

Каждый пользователь Интернета во время серфинга натыкался на сайты, которые отображаются некорректно. К примеру, на таких сайтах могли отображаться вместо понятных слов неясные закорючки в виде символов, дуг, иероглифов и так далее. Особенно высокая вероятность увидеть такой сайт, если вы перейдете на какой-нибудь китайский или японский портал. А все потому, что там используют иные кодировки, нежели в Рунете. Файл htaccess поможет предотвратить появление таких закорючек на вашем сайте.

Содержание

  • Зачем нужна кодировка на сайте
  • Как настроить кодировки сайта в файле htaccess
  • Как задать еще одну кодировку для некоторых разделов сайта

Зачем нужна кодировка на сайте

Существует основная кодировка сайта, так называемый Default Charset. Кодировка нужна для того, чтобы определять правило преобразования символов в кодовые значения.

Раньше кодировки были маленькими, и включали не более 7 бит информации, такие как ASCII. Теперь кодировок появилось большое множество, включая популярные UTF8, и Windows 1251.

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

В файле htaccess вы можете указать параметр Default Charset, который будет определять главную кодировку для всего веб-ресурса. Также вы сможете прописать помимо Default Charset и другие кодировки, которые будут верно отображаться на страницах сайта. Обычно, вебмастера в обязательном порядке указывают UTF8 и Windows 1251, поскольку эти кодировки используются по умолчанию многими браузерами и текстовыми редакторами.

Чтобы избежать появления неразборчивых закорючек на сайте, вам следует либо настроить главную кодировку сайта при помощи Default Charset и запретить перекодировку файлов, либо прописать все допустимые кодировки в htaccess, включая UTF8, Windows 1251 и другие. Ведь главная проблема в том, что, к примеру, пользователь может отправить данные в другой кодировке, и тогда сервер не сумеет ее прочитать. Вам нужно предупредить такие действия.

Как настроить кодировки сайта в файле htaccess

Чтобы указать ключевую кодировку Default Charset, которая по умолчанию обрабатывается сервером и отправляется в браузер, воспользуйтесь опцией AddDefaultCharset. Она необходима для того, чтобы добавить (add) настройку кодировки по умолчанию (Default Charset). Дело в том, что при отправке HTTP-заголовков, в них в разделе Content-Type прописывается Charset, который передает браузеру, в какой кодировке рассматривать символы на сайте. Если хотите прописать UTF8, то укажите AddDefaultCharset UTF8, а если Windows 1251 — то AddDefaultCharset Windows 1251.

AddDefaultCharset — это основная директива, которая вам понадобится для настройки кодировок сайта в файле htaccess. Команда AddDefaultCharset окончательно решит проблему со скриптами, которые по умолчанию используют не UTF8 или Windows 1251, а какие-то другие неизвестные русским браузерам кодировки. Если бы вы не прописали параметр AddDefaultCharset, то в браузере появилась бы ошибка, а так все документы перекодируются в основную кодировку. Учтите, что не каждый браузер одинаково видит все кодировки, потому лучше используйте самые популярные — уже упомянутые UTF8 или Windows 1251.

Также вы можете избавиться от проблем с кодировками, если активируете автоматическую перекодировку файлов при помощи htaccess. Для этого используйте опцию CharsetSourceEnc, после которой пропишите основную кодировку ресурса, в которую будут перекодироваться все прочие. Если по каким-то причинам вам нужно убрать перекодировку, то пропишите в htaccess следующую строку: CharsetDisable On.

Как задать еще одну кодировку для некоторых разделов сайта

Хоть такое и бывает нечасто, но порой возникает потребность сделать одну страницу или целую часть раздела на другом языке. Другой язык — это автоматически и другая кодировку. А если у вас в корневом каталоге лежит файл htaccess, в котором написано AddDefaultCharset Windows-1251, то все страницы автоматически будут читаться по этой кодировке. В результате, пользователь зайдет в иностранный раздел вашего сайта и вместо статьи на финском языке увидите набор несвязных символов.

Чтобы разобраться с этой проблемой, вам необходимо будет создать отдельный файл htaccess и прописать в нем: AddType «text/html; charset=iso-8859-1» .html. Дело в том, что этот файл может действовать как на весь сайт, так и на отдельные его каталоге. Все зависит от того, где вы поместите htaccess. Если разместите второй htaccess внутри папки /fin/ с финским разделом сайта, то конфигурации будут работать только на эту часть ресурса. Остальные будут подчиняться главному файлу htaccess, размещенному в корне сайта. А при помощи указанной строки все файлы html в папке fin будут работать по ISO-8859-1.a

Question

How do I use .htaccess directives on an Apache server to serve files with a specific encoding?

Background

It is important to ensure that any information about character encoding sent by the server is correct, since information in the HTTP
header overrides information in the document itself.

Many Apache servers are configured to send files using the ISO-8859-1 (Latin-1) encoding. In the examples in this FAQ, we’ll assume that
you want to serve your file or files using a different encoding than that specified in the default configuration. (For advice on choosing an encoding
see Choosing & applying a character encoding.)

The following shows an example of an HTTP header that accompanies a file sent to a user agent. In this case the character encoding
information is included in the Content-Type header on the second line from the bottom.

HTTP/1.1 200 OK
Date: Wed, 05 Nov 2003 10:46:04 GMT
Server: Apache/1.3.28 (Unix) PHP/4.2.3
Content-Location: CSS2-REC.en.html
Vary: negotiate,accept-language,accept-charset
TCN: choice
P3P: policyref=http://www.w3.org/2001/05/P3P/p3p.xml
Cache-Control: max-age=21600
Expires: Wed, 05 Nov 2003 16:46:04 GMT
Last-Modified: Tue, 12 May 1998 22:18:49 GMT
ETag: "3558cac9;36f99e2b"
Accept-Ranges: bytes
Content-Length: 10734
Connection: close
Content-Type: text/html; charset=utf-8
Content-Language: en

In the example the Content-Type header expresses both the MIME type of the file and the character encoding. The MIME type describes the
format of the file being served. HTML files are typically served as text/html. The character encoding (or ‘charset‘) of
this file is UTF-8.

To learn how to view the HTTP header for a file see the article Checking HTTP Headers.

Files on an Apache server may be served with a default character encoding declaration in the HTTP header that conflicts with the actual
encoding of the file. The character encoding sent by the server may be the out-of-the-box default, a default set by the system administrator, or a
result of implementing various Apache directives. In other cases no character encoding information is sent by the server when it is actually
desired.

If the server is set up to allow users or administrators to change information in .htaccess files, these can provide a way to override
default settings. This FAQ shows you how.

Answer

There are a couple of different scenarios to bear in mind. In the first instance, you may want to change the default for all the files in
a directory with the same extension. Alternatively, you may want to change the default for a single file or small number of files. We will explore
these in turn.

In our examples we will assume that the default server configuration serves files as ISO-8859-1, but that you want to serve your file or
files using UTF-8 (a very sensible strategy!).

Is this answer relevant to you?

This article is written for content authors, rather than system administrators. Setting the server’s default encoding is beyond the
scope of this article.

This advice is only relevant if you are happy to declare the character encoding of your document via the HTTP header. In some cases
you may not want that.

Note that this FAQ also assumes that your server is set up to use .htaccess files, and that the directives described below work in .htaccess files on your server. It is also assumed that it is not
appropriate to simply change the default configuration of the server. If you are not sure, contact your server administrator.

You should also be aware of the conventions in use on your server for association of character encoding information with extensions.
In some cases the server may be set up in the expectation that character encodings are indicated by encoding-specific extensions, eg.
example.html.utf8 where it is the .utf8 that needs to be associated with a character encoding, rather than the .html (which may be associated with
the file type).

If these approaches fail, you should consult the Apache manuals (see attached links) or your server
administrator.

Specifying by extension

Use the AddCharset directive to associate the character
encoding with all files having a particular extension in the current directory and its subdirectories. For example, to serve all files with
the extension .html as UTF-8, open the .htaccess file in a plain text editor and type the following line:

The extension can be specified with or without a leading dot. You can add multiple extensions to the same line. This will still work
if you have file names such as example.en.html or example.html.en.

The example will cause all files with the extension .html to be served as UTF-8. The HTTP Content-Type header will contain a line that
ends with the ‘charset’ information as shown in the example that follows.

Content-Type: text/html; charset=UTF-8

Note: All files with this extension in all subdirectories of the current location will also be served as UTF-8. If,
for some reason, you need to serve the odd file with a different encoding you will need to override this using additional directives.

Note: You can associate the character encoding with any extension attached to your file. For example, suppose you do
language negotiation and you have pages in two languages that follow the model example.en.html and example.ja.html. Let’s also suppose that you are
happy to serve English pages using your server’s ISO-8859-1 default, but want to serve Japanese files in UTF-8. To do this, you can associate the
character encoding with the language extension, as follows:

Take note, however, that, if you can, it might be a better solution to change the server default to UTF-8, or serve all files in new
directories as UTF-8.

Note: It is also possible to achieve the same result using the AddType directive, although this declares both the character encoding and the
MIME type at the same time. The decision as to which is most appropriate will depend in part on how you are using extensions for content negotiation.
If you are using different extensions to express the document type and the character encoding, this is less likely to be appropriate.

AddType 'text/html; charset=UTF-8' html

Changing the occasional file

Let’s now assume that you want to serve only one file as UTF-8 in a large directory where all the other older files are correctly
served as ISO-8859-1. The file you want to serve as UTF-8 is called example.html. Open the .htaccess file in a plain text editor and type the
following:

<Files "example.html">
AddCharset UTF-8 .html
</Files>

What we did here was wrap the directive discussed in the previous section in some markup that identifies the specific file we are concerned with. If you have the need,
there is also a slightly different syntax that allows you to specify a number of file names using a regular expression.

Note: It is also possible to achieve the same result using the AddType directive shown above, or, in this case, the ForceType directive, although these declare both the character encoding and the MIME
type at the same time.

<Files "example.html">
ForceType 'text/html; charset=UTF-8'
</Files>

Note: Any files with the same name in a subdirectory of the current location will also be served as UTF-8, unless you
create a counter directive in the relevant directory.

More complex scenarios

When two extension rules apply to the same document the order of extensions is important. Thus, in the following example

AddCharset UTF-8 .utf8
AddCharset windows-1252 .html

the file ‘example.utf8.html’ will be served as «windows-1252» and ‘example.html.utf8’ as UTF-8.

Further reading

  • Checking HTTP Headers

  • Apache MultiViews language negotiation set up

  • Apache module mod_mime documentation v1 ; v2

  • Apache version 1 .htaccess and allowOverride documentation

  • Apache version 2 .htaccess and allowOverride documentation

  • Tutorial – Handling character encodings in HTML and CSS

  • Related links – Setting up a server

    • Characters

Когда я только начинал изучать тему разработки сайтов, кракозябры были одной из моих постоянных проблем. Создал HTML-страницу — в браузере кракозябры, установил денвер и попробовал создать сайт на PHP — снова вместо букв кракозябры. Скачал иностранную тему, подключился к базе данных — та же проблема.

На своих сайтах я обычно использую UTF-8 (это такая кодировка текста, она ещё называется юникод), соответственно она будет присутствовать во всех примерах в этой статье.

1. UTF-8 без BOM

Начнём с самой простой проблемы. Вы создали какой-то HTML-файл, открыли его в браузере и получили:

Проблема с кодировкой (кракозябры)

Кракозябры (проблема с кодировкой).

Проблема актуальна в основном для пользователей Windows, на маке я с таким ни разу не сталкивался.

Решение проблемы зависит в основном от того, каким редактором вы пользуетесь. Для пользователей Windows я рекомендую бесплатный офигительный Notepad++.

Значит, открываем файл в Notepad++ и переходим в Кодировки > Преобразовать в UTF-8 без BOM. Вопрос — почему без BOM? Потому что с BOM у вас будут постоянно вставляться пустые символы (на самом деле они не пустые, у них тоже есть своя функция, но нам она в данном случае не нужна) куда не надо, а для PHP это уже критично.

Notepad++ преобразовать в utf8 без BOM

2. Мета тег charset

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

Всё, что нам требуется, это вставить следующий код между тегами <head> сайта. Прежде всего проверьте, возможно этот метатег у вас уже присутствует. Если да, то посмотрите какое у него стоит значение параметра charset.

В темах WordPress обычно этот тег уже имеется по умолчанию и выглядит следующим образом:

<meta charset="<?php bloginfo('charset'); ?>" />

3. .htaccess

Если русские буквы до сих пор отображаются кракозябрами, тогда открываем ваш .htaccess, который лежит в корне сайта и вставляем туда с новой строки это:

4. Заголовки сервера через header()

Ещё один способ определения кодировки. На этот раз через PHP. На WordPress никогда не приходилось им пользоваться.

header('Content-Type: text/html; charset=utf-8');

Важно! Этот код должен вставляться до того, как будет что-либо выведено на странице сайта, иначе — ошибка.

5. Проблемы с последним символом при обрезке строки

На многих сайтах встречаются блоки с популярными записями, последними комментариями, отзывами и так далее. Обычно в таких обзорных блоках выводится часть записи/комментария/отзыва и кнопка «читать далее». Так вот, для того, чтобы вывести первые несколько предложений или первые несколько слов текста, используется функция PHP substr(). Конечно же в основном я имею ввиду англоязычные темы, которых так много в интернете. Даже если у этих тем есть локализация — то есть вроде бы она на русском — переведена админка, переведён практически весь сайт, но при этом мы встречаем такие вот косяки:

Проблема с кодировкой функции substr()

Как решить эту проблему?

Легко — всё что нам нужно, это найти функцию substr() в коде и поменять её на mb_substr().

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

6. MySQL

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

Такое может произойти, если кодировка вашего сайта не совпадает с кодировкой базы данных, к которой вы подключаетесь. В WordPress обычно таких проблем не бывает.

Для того, чтобы исправить это, после подключения к БД, делаем следующее:

mysql_query("SET NAMES 'UTF8'");

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

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Пишите, если нужна помощь с сайтом или разработка с нуля.

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Как изменить кодировку на компьютере windows 10
  • Как изменить кодировку на utf 8 html
  • Как изменить кодировку на utf 8 excel
  • Как изменить кодировку на utf 8 cmd
  • Как изменить кодировку консоли windows

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии