Просмотров: 54537
Дата последнего изменения: 30.05.2024
Марина Павлова
Сложность урока:
4 уровень - сложно, требуется сосредоточиться, внимание деталям и точному следованию инструкции.
1
2
3
4
5
Недоступно в лицензиях:
Ограничений нет
С версии main 24.0.0 продукты 1С-Битрикс полностью перешли на кодировку UTF-8. Однобайтовые установки более не поддерживаются.
Сменить кодировку поможет Мастер конвертации сайта в UTF-8. Или вы можете выполнить её вручную с помощью инструкции в уроке.
Внимание! Прежде чем приступить к конвертации сайта обязательно сделайте резервную копию сайта и базы данных. Настоятельно рекомендуем предварительно потренироваться выполнять конвертацию на отдельной копии сайта. Конвертация сайта сложная операция и каждый случай индивидуален. При её выполнении высока вероятность потерять важные данные, если что-то пойдет не так!
Общий порядок действий
Редактировать файлы и вносить правки на сервере можно подключаясь по SSH.
Рассмотрим общий порядок конвертации сайта с кодировки cp1251 в UTF-8:
В региональных настройках Настройки > Настройки продукта > Языковые параметры > Региональные настройки сменитe кодировку на UTF-8 для всех языков;
mbstring.func_overload до версии 20.100.0 модуля main
До версии 20.100.0 требуется добавить в файл /.htaccess строки:
С версии 20.100.0 Главного модуля (main) требуется удаление настройки PHP mbstring.func_overload. Эта опция более не требуется и не поддерживается платформой.
Установите в файле настроек php.ini значение default_charset = "utf-8";
Расположение файла настроек php.ini можно посмотреть заранее в административном разделе на странице
Настройки PHP
Страница Настройки PHP (Настройки > Инструменты > Диагностика > Настройки PHP) служит для отображения информации о текущих настройках PHP.
и в файле /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.
Установите в /.htaccess:
php_value default_charset utf-8
Перекодируйте все файлы сайта в UTF-8.
Сбросьте весь кеш;
Выйдите и зайдите заново на сайт чтобы обновить данные сессии.
База данных
Для конвертации базы (БД) потребуется сменить кодировку самой базы, всех её таблиц и всех текстовых полей таблиц. НЕ выполняйте конвертацию БД из административной части. Используйте для этого другие доступные средства.
В простом случае (без сериализованных данных) перекодировать базу данных и все таблицы можно следующим образом:
Изменить кодировку самой базы данных сайта:
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 {} \;
Важно:
Способ не подходит для сайтов на нескольких языках, т.к. в таком случае в структуре будут присутствовать файлы в различных кодировках.
Учитывайте особенности используемого вами Unix. Указанный выше пример может не сработать. В этом случае его надо адаптировать под вашу ОС. Например:
Использование внешних программ или конвертация файлов вручную
Часто при использовании внешних программ для конвертации в файлы добавляется специальная последовательность символов, так называемый BOM. Эти символы должны находиться только вначале файла, а поскольку итоговая страница является составной из нескольких php файлов, то спецсимволы появляются в теле страницы. Если делаете конвертацию файлов вручную - не сохраняйте с BOM!
Бизнес-процессы
Шаблоны бизнес-процессов с переменными, константами и параметрами хранятся в сериализованном и запакованном виде в таблице b_bp_workflow_template, поэтому смена кодировки БД не повлияет на них. Чтобы привести их к нужной кодировке требуется выполнить дополнительные действия.
Сначала обязательно сделайте копию таблиц шаблонов b_bp_workflow_template одним из приведенных ниже способов:
//создаём новую таблицу, аналогичную оригинальной
CREATE TABLE b_bp_workflow_template_bak LIKE b_bp_workflow_template;
// копируем данные в созданную таблицу
INSERT INTO b_bp_workflow_template_bak SELECT * FROM b_bp_workflow_template;
Основные шаги по конвертации сайта выполнены. Если после конвертации возникают ошибки при открытии сайта, включите режим отладки 'debug' => true в файле /bitrix/.settings.php. Это позволит видеть где и какие возникают ошибки.
Обязательно выполните
проверку системы
Форма Проверка системы (Настройки > Инструменты > Проверка системы) предназначена для всесторонней проверки соответствия параметров системы, на которой осуществляется функционирование проекта, минимальным и рекомендуемым техническим требованиям продукта.
Подробнее в курсе Администратор. Базовый.
. По результатам проверки будет видно, что ещё нужно исправить. Пользуйтесь подсказками под знаками вопроса справа.
Если возникли ошибки с таблицами базы данных (последняя строка проверки), можно посмотреть
логи в журнале
. В конце файла логов будут указаны запросы, с помощью которых можно исправить эти ошибки. Перед началом исправления рекомендуется сделать копию базы данных.
Внимание! С версии 23.200.0 появился альтернативный путь смены кодировки - Мастер конвертации сайта в UTF-8. Он находится на странице списка мастеров /bitrix/admin/wizard_list.php?lang=ru. Все шаги его работы сопровождаются необходимыми пояснениями.