Кракозябры на сайте появляются, когда текст сохранён в одной кодировке, а браузеру объявлена другая: русские буквы превращаются ⠫привет», вопросики или ромбики. В цепочке участвуют четыре звена - заголовок сервера, метатег страницы, кодировка файлов и кодировка базы данных с соединением, и ломается всегда какое-то одно. Лечение - не подбирать варианты наугад, а найти расхождение и привести все звенья к одной кодировке, для современных сайтов это UTF-8. Разбираем, как поставить диагноз за 15 минут.

Вид кракозябр подсказывает диагноз. Текст вида «РїСЂРёРІРµС‚», раздутый вдвое, - это UTF-8, прочитанный как windows-1251. Сплошные вопросительные знаки - текст уже потерян при конвертации в базе или при сохранении файла. Ромбики со знаком вопроса - в поток UTF-8 попали байты другой кодировки. Первый случай обратим настройкой, второй - только восстановлением из бэкапа.

Откуда берутся кракозябры на сайте: типовые сценарии

  • Переезд на новый хостинг - у нового сервера другая кодировка по умолчанию в настройках PHP, MySQL или веб-сервера
  • Правка файла не тем редактором - файл в UTF-8 пересохранили в windows-1251 или наоборот, и «поехал» конкретный блок сайта
  • Обновление PHP или MySQL - сменились умолчания подключения к базе, и старый сайт начал читать её неправильно
  • Импорт данных - каталог из Excel или выгрузка 1С пришли в 1251, а сайт живёт в UTF-8: кракозябры только у импортированных товаров
  • Смешанное наследство Битрикс - старые сайты на Битрикс часто работают в windows-1251, и перенос кода или базы с UTF-8-проекта даёт кашу

Где проверять кодировку: четыре звена цепочки

ЗвеноКак проверитьТиповая ошибка
Заголовок сервераF12, вкладка Network, поле Content-Type у документаСервер объявляет charset, не совпадающий с реальной кодировкой страниц
Метатег страницыИсходный код: meta charset в начале HTMLМетатег говорит одно, заголовок сервера - другое; побеждает заголовок
Файлы сайтаОткрыть шаблон в редакторе с определением кодировкиЧасть файлов в UTF-8, часть в 1251 после правок разными людьми
База и соединениеКодировка таблиц в phpMyAdmin и параметры подключенияБаза в одной кодировке, соединение с ней - в другой

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

  1. Зафиксируйте масштабКракозябры везде - смотрите заголовок сервера и соединение с базой. В одном блоке или разделе - виноват конкретный файл или импорт. В админке нормально, на витрине нет - расхождение между базой и шаблоном.
  2. Сделайте бэкапСкопируйте файлы и базу до любых правок: неудачные эксперименты с перекодировкой должны быть обратимы.
  3. Определите фактические кодировкиПосмотрите Content-Type в сети, meta charset в коде, кодировку файлов в редакторе, кодировку таблиц и соединения в phpMyAdmin. Выпишите все значения - расхождение и есть причина.
  4. Приведите цепочку к одному стандартуМеняйте объявление, а не перекодируйте контент, если текст ещё цел: правильный charset в заголовке и метатеге чинит большинство случаев. Перекодировка файлов и базы - шаг для случаев, когда данные реально сохранены в разнобой.
  5. Проверьте всё, что генерирует текстФормы, письма с сайта, выгрузки, печатные версии: кодировка ломается и там. Кракозябры в письмах часто идут в комплекте с проблемами доставки - загляните в статью про письма в спаме.
Главная опасность. Не запускайте массовую перекодировку базы «на живую» и не сохраняйте файлы в новой кодировке поверх единственной копии. Двойная перекодировка - когда битый текст конвертируют ещё раз - разрушает данные безвозвратно: вопросики вместо букв не лечатся уже ничем, кроме бэкапа.

Кракозябры не сдаются?

Найдём сломанное звено, приведём сервер, файлы и базу к единой кодировке и вернём текст из копий, если он повреждён. Аккуратно, с бэкапами, обычно за один день.

Исправить кодировку

Почему стандарт - UTF-8 и что делать со старым сайтом на 1251

UTF-8 понимает все языки и символы, не конфликтует с внешними сервисами и API, и именно его ждут поисковики и браузеры по умолчанию. Сайты на windows-1251 работают, но регулярно спотыкаются: эмодзи в отзывах, обмен данными с сервисами доставки и оплат, интеграции с CRM. Перевод рабочего сайта на Битрикс с 1251 на UTF-8 - это полноценный проект с конвертацией базы, файлов и проверкой всех интеграций: делается на тестовой копии и переключается за одну ночь. Если сайт старше десяти лет и планирует жить дальше - это разумная инвестиция, оценим по запросу в рамках доработки сайта.

Совет. Договоритесь со всеми, кто правит сайт, о едином правиле: файлы сохраняем только в UTF-8 без BOM, для правок используем нормальные редакторы кода, а не Блокнот. Половина внезапных кракозябр - результат одной правки «на минуточку» не тем инструментом.

Частые вопросы про кодировку и кракозябры

Кракозябры появились только в письмах с сайта. Где искать?
В настройках отправки почты: кодировка писем задаётся отдельно от кодировки страниц - в почтовых шаблонах CMS или настройках SMTP. Проверьте заголовки письма: charset в них должен совпадать с фактической кодировкой текста. В Битрикс кодировка почтовых шаблонов настраивается в главном модуле.
После переноса сайта на новый хостинг весь текст стал вопросиками. Это конец?
Если вопросики видны в самой базе через phpMyAdmin - данные повреждены при переносе, нужен повторный перенос из исходной базы или бэкапа с правильными параметрами кодировки. Если в базе текст цел, а вопросики только на сайте - чинится настройкой соединения, данные не пострадали.
Можно ли исправить кодировку без программиста?
Простые случаи - да: поправить meta charset или кодировку в настройках хостинга по нашей таблице выше. Но всё, что касается перекодировки базы и файлов, лучше отдать специалисту: цена ошибки - безвозвратная потеря текста. Диагностику мы делаем бесплатно, а работы называем заранее.
Почему кракозябры видны только в одном браузере или у одного посетителя?
Браузер угадывает кодировку, когда сайт объявляет её невнятно или противоречиво: одни угадывают удачно, другие нет. Это симптом того же конфликта звеньев - правильно объявленная кодировка выглядит одинаково везде. Лечится по общему плану из этой статьи.

Итог: кракозябры - это всегда спор между звеньями цепочки «сервер - страница - файлы - база», и он решается диагностикой, а не перебором настроек. Сложный случай, старый сайт на 1251 или страх потерять тексты - передайте задачу нам: приведём кодировку в порядок с бэкапами на каждом шаге, а на поддержке проследим, чтобы история не повторилась. С 2013 года, 450+ проектов, смета в течение дня.