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

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

Как же это проследить и устранить проблему с кодировкой на сайте?

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

Пункт первый

Очень просто. Начните с самого документа. При создании любого html-документа его кодировка указывается в блоке head в meta-теге. Этот самый meta-тег выглядит следующим образом:

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

Данный тег говорит о том, что документ использует кодировку UTF-8, или так называемый Юникод. Наиболее распространенными кодировками являются UTF-8 и Windows-1251. Кодировка UTF-8 работает со всеми символами и является наиболее удобной для сайтов, которые содержат материалы на разных языках. Для кириллицы и английских букв также часто используют кодировку Windows-1251. Выбор кодировки документа всегда остается на ваше усмотрение, главное, чтобы кодировки документа и сервера совпадали. Если вы создаете документ в кодировке Windows-1251, то в meta-теге utf-8 следует заменить на windows-1251.

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

Пункт второй

Далее. Когда ваш документ готов, и вы определились с его кодировкой, указав её в meta-теге, важно чтобы и сам документ был сохранен в этой кодировке.

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

Пункт третий

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

AddDefaultCharset UTF-8

Разумеется, если вы используете Windows-1251, то вместо UTF-8 следует прописать WINDOWS-1251. Затем файл .htaccess нужно сохранить. Перезапускать сервер после этого не обязательно.

Кодировка в базе данных MySQL

Пункт четвертый

После этого некорректные символы с сайта должны исчезнуть. Однако не отовсюду. Кроме файлов сайт держится еще на базах данных, таблицы и поля которых тоже имеют свою кодировку. Кодировка таблиц и полей базы данных должна также совпадать с кодировкой всех файлов сайта и самого сервера. Если же после выставления правильной кодировки в базе данных перед вами все равно возникают непонятные символы, то проблема в кодировке подключения к базе данных. Для решения данной проблемы подключитесь к серверу баз данных с правами mysql root пользователя.

mysql -u root -p

выберите необходимую вам БД

USE имя_базы;

и выполните следующий запрос:

SET NAMES 'utf8’;

Если вы используете кодировку Windows-1251, то вместо utf-8 следует прописать cp1251. Так данную кодировку называет сервер MySQL.

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

На этом всё. Ваш сайт должен отображаться как надо.

Примечание

Часто возникают ситуации, связанные с тем, что файл .htaccess не работает. Это связано с настройками Apache для вашего сервера или же для отдельного виртуального хоста, на котором содержится Ваш сайт. За опции данного файла отвечает директива AllowOverride, которая используется в конфигурационном файле Apache – httpd.conf. Если данная директива выглядит так: AllowOverride None, то сервер будет игнорировать файлы .htaccess. Для решения этой проблемы следует заменить None на All. Это даст вам возможность переопределять все допустимые настройки с помощью файла .htaccess. После внесения изменений в файл httpd.conf необходимо либо перезапустить веб-сервер (лучше), либо выполнить команду service httpd reload (перечитать директивы без перезапуска веб-сервера), чтобы изменения вступили в силу.

Подробнее о виртуальных хостах вы можете прочитать в статье Настройка виртуальных хостов в Apache.