Конвертация сайта битрикс в кодировку UTF-8 (cp1251 в UTF8)

Подготовка

  • Для работы сайта на битрикс в utf8 абсолютно необходимо наличие модуля mbstring в php (это есть почти на любом хостинге) и установка параметра
    mbstring.func_overload 2

    С этим может быть проблема т.к. с версии php 5.2.8 параметр меняется глобально на весь сервер (http://bugs.php.net/bug.php?id=47187). Уточните вопрос у хостера, но будьте осторожны если вам предложат CGI (см. «как выбрать хостера»).

    На VPS/выделенном сервере параметр без проблем меняется в php.ini.

  • Обязательно сделайте резервную копию работающего сайта, а лучше именно на копии проводите эксперименты. Если что-то пойдёт не так — вы можете потерять данные!

Этапы перехода

  • Подготовить сервер как показано выше
  • Добавить в /bitrix/php_interface/dbconn.php
    define(«BX_UTF», true);
  • Изменить в настройках сайта кодировку с windows-1251 на utf-8
  • Изменить в настройках языка ru кодировку с windows-1251 на utf-8
  • Конвертировать все файлы в utf8
  • Конвертировать БД в utf8
  • Сменить в /bitrix/php_interface/after_connect.php
    $DB->Query(«SET NAMES ‘cp1251′»smile;);

    на

    $DB->Query(«SET NAMES ‘utf8′»smile;);
  • Сбросить весь кеш
  • Выйти и зайти на сайт чтобы обновить данные сессии

Практическая сторона вопроса

После смены кодировки сайта публичная часть принимает вид:

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

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

Примечание. Часто при использовании внешних программ для конвертации в файлы добавляется специальная последовательность символов, т.н. BOM. Эти символы должны находиться только вначале файла, а поскольку итоговая html страница является составной из нескольких php файлов, то спецсимволы появляются в теле html страницы. Если делаете вручную — не сохраняйте с BOM!

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

Скрипт выполняет операции:

— Конвертировать все файлы в utf8
— Конвертировать БД в utf8

Остальное следует делать вручную по списку в том порядке, как написано.

Можно скачать по ссылке: convert_utf8.php

В итоге получил картинку

Теперь, словно, девушка даже слегка улыбнулась smile:)

Обновление от 20.02.2012

  • Теперь конвертируются все файлы, не только языки. При этом делается авто определение кодировки файла, а значит можно выполнять конвертацию повторно.
  • Для кодировки базы указывается сравнение utf8_unicode_ci (требуется продуктом).
  • Исправлены ошибки конвертации базы.
  • Шаг конвертации файлов можно пропустить.