336  /  380
Справочник

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

Просмотров: 35498
Дата последнего изменения: 22.11.2023
Марина Павлова
Сложность урока:
4 уровень - сложно, требуется сосредоточиться, внимание деталям и точному следованию инструкции.
1
2
3
4
5
Недоступно в лицензиях:
Ограничений нет

Рассмотрим общий порядок конвертации сайта с кодировки cp1251 в UTF-8.

Внимание! Прежде чем приступить к конвертации сайта обязательно сделайте резервную копию сайта и базы данных. Настоятельно рекомендуем предварительно потренироваться выполнять конвертацию на отдельной копии сайта. Конвертация сайта сложная операция и каждый случай индивидуален. При её выполнении высока вероятность потерять важные данные, если что-то пойдет не так!

  Общий порядок действий

Редактировать файлы и вносить правки на сервере можно подключаясь по SSH.

Общий порядок действий:

  1. В региональных настройках Настройки > Настройки продукта > Языковые параметры > Региональные настройки сменитe кодировку на UTF-8 для всех языков;

  2. mbstring.func_overload до версии 20.100.0 модуля main

  3. Установите в файле настроек php.ini значение default_charset = "utf-8";

    Расположение файла настроек php.ini можно посмотреть заранее в административном разделе на странице Настройки PHP Страница Настройки PHP (Настройки > Инструменты > Диагностика > Настройки PHP) служит для отображения информации о текущих настройках PHP.

    Подробнее в курсе Администратор. Базовый
    (Loaded Configuration File) или с помощью PHP функции phpinfo().

    Если сайт размещен на Хостинге, возможно понадобится обратиться к хостинг провайдеру для внесения этих настроек.

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

    В этом же файле удалите строки, относящиеся к кодировке cp1251:

    setlocale(LC_ALL, 'ru_RU.CP1251');
    mb_internal_encoding("Windows-1251");
    
  5. Установите значение 'value' => true для utf_mode в файле /bitrix/.settings.php:
    utf_mode =>
    	array(
    		'value' => true,
    		'readonly' => true,
    	),
    
  6. Перекодируйте всю базу данных в UTF-8. Вероятнее всего придётся обращаться за помощью к администратору сервера.
  7. Установите в файле /bitrix/php_interface/after_connect.php
    $DB->Query("SET NAMES 'utf8'");
    $DB->Query('SET collation_connection = "utf8_unicode_ci"');
    
    и в файле /bitrix/php_interface/after_connect_d7.php
    $this->queryExecute("SET NAMES 'utf8'");
    $this->queryExecute('SET collation_connection = "utf8_unicode_ci"');
    //До версии main 22.0 вместо $this использовалась переменная $connection.
  8. Установите в /.htaccess:
    php_value default_charset utf-8
    
  9. Перекодируйте все файлы сайта в UTF-8.
  10. Сбросьте весь кеш;
  11. Выйдите и зайдите заново на сайт чтобы обновить данные сессии.

  База данных

Для конвертации базы (БД) потребуется сменить кодировку самой базы, всех её таблиц и всех текстовых полей таблиц. НЕ выполняйте конвертацию БД из административной части. Используйте для этого другие доступные средства.

В простом случае (без сериализованных данных) перекодировать базу данных и все таблицы можно следующим образом:

  • Изменить кодировку самой базы данных сайта:
    ALTER DATABASE имя_базы_данных charset=utf8;
    
  • Изменить кодировку соединения с базой данных:
    SET NAMES 'utf8'
    
    ALTER DATABASE database_name CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    
  • Выполним запрос, который позволит найти все таблицы базы данных и сформировать запрос на смену кодировки для каждой:
    SELECT CONCAT('ALTER   TABLE `', t.`TABLE_SCHEMA`, '`.`', t.`TABLE_NAME`, '` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;') as sqlcode
    FROM `information_schema`.`TABLES` t
    WHERE 1
    AND t.`TABLE_SCHEMA` = 'имя_базы_данных'
    ORDER BY 1
    ;
    
  • В качестве ответа получим список запросов вида:
    ALTER TABLE `имя_базы_данных`.`имя_таблицы` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    
  • Выполните все запросы. База данных и таблицы перекодированы.

Внимание: Если в базе данных хранятся сериализованные данные, то приведенный выше метод конвертации для них не подойдет. Используйте специальные методы / средства для конвертации таких данных.

  Файлы

В простом варианте, когда все файлы сайта в кодировке cp1251, перекодировать их в UTF-8 можно выполнив такую команду в корневой папке сайта (для UNIX систем):

// переходим в корневую папку сайта. Например:
cd /var/www/html/ 

// выполняем команду для перекодирования файлов
find . -name '*.php' -type f -exec iconv -fcp1251 -tutf8 -o /tmp/tmp_file {} \; -exec mv /tmp/tmp_file {} \;

Важно:
  1. Способ не подходит для сайтов на нескольких языках, т.к. в таком случае в структуре будут присутствовать файлы в различных кодировках.
  2. Учитывайте особенности используемого вами Unix. Указанный выше пример может не сработать. В этом случае его надо адаптировать под вашу ОС. Например:
    // выполняем команду для перекодирования файлов
    find ./ -type f -name "*.php" -exec bash -c 'file="$1"; iconv -f cp1251 -t utf8 "$file" > "${file}.tmp" && mv "${file}.tmp" "$file"' _ {} \;

Использование внешних программ или конвертация файлов вручную

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

  Советы и ссылки

Основные шаги по конвертации сайта выполнены. Если после конвертации возникают ошибки при открытии сайта, включите режим отладки 'debug' => true в файле /bitrix/.settings.php. Это позволит видеть где и какие возникают ошибки.

Обязательно выполните проверку системы Форма Проверка системы (Настройки > Инструменты > Проверка системы) предназначена для всесторонней проверки соответствия параметров системы, на которой осуществляется функционирование проекта, минимальным и рекомендуемым техническим требованиям продукта.

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

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

Список ссылок по теме:



22
Курсы разработаны в компании «1С-Битрикс»

Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Развернуть комментарии