Введите поисковый запрос

Конвертация кодировки сайта из cp1251 в UTF8

Расскажу за конвертировать кодировку сайт. Покажу на конкретном примере.

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

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

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

mbstring.func_overload 2

Если у вас сайт на хостинге TimeWeb то это можно сделать через файл .htaccess


Этап перевода кодировки сайта на Битрикс

  • Добавить в /bitrix/php_interface/dbconn.php
    define("BX_UTF", true);

  • Установить в /bitrix/.settings.php
    utf_mode => array('value' => true, 'readonly' => true)

  • Изменить в настройках сайта кодировку с windows-1251 на utf-8
  • Изменить в настройках языка ru кодировку с windows-1251 на utf-8
  • Конвертировать все файлы в utf8
  • Конвертировать БД в utf8
  • Сменить в /bitrix/php_interface/after_connect.php

    $DB->Query("SET NAMES 'cp1251'";);

    на
    $DB->Query("SET NAMES 'utf8'";);

    и в файле /bitrix/php_interface/after_connect_d7.php
    $connection->queryExecute("SET NAMES 'utf8'");
    $connection->queryExecute('SET collation_connection = "utf8_unicode_ci"');



  • Сбросить весь кеш
  • Выйти и зайти на сайт чтобы обновить данные сессии

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

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



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

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

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

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



Скрипт выполняет операции:
- Конвертировать все файлы в utf8
- Конвертировать БД в utf8


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

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

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




Ваша оценка:

Комментарии (0)


Оставить заявку
 
 

Денис Бунаков

C 2012 года являюсь Битрикс Программистом.
Программист 1С:Битрикс – это веб-разработчик с узким профилем, который работает непосредственно с продукцией от компании 1С.