Правильная смена кодировки 1C-Bitrix с Windows-1251 (CP1251) на UTF-8
В последнее время, в процессе работы, я все меньше и меньше встречаю сайты, которые находятся в некогда популярной кодировке «Windows-1251», приоритетно используемой на русскоязычных ресурсах.
Если верить «Wikipedia» («Википедия» — свободная энциклопедия), на начало апреля 2019 года лишь на 1% всех веб-страниц используется эта кодировка.
Скрывать не буду, я в числе тех, кто так же не использует ее в своих проекта, и вот почему:
- Разные проблемы в процессе работы кода.
- Лишние действия при работе с кодом в текстовых редакторах.
- Отсутствие поддержки многих языков.
- Наличие ошибок в верстке сайта при его проверке через validator.w3.org.
Чтобы избежать этих (и не только) неприятных моментов, сегодня в этой статье я подробно расскажу вам, как перевести сайт под управлением CMS 1C-Bitrix из кодировки «Windows-1251» в «UTF-8».
1. Конвертацию (смену кодировки) в CMS 1C-Bitrix мы начнем с самого главного – создания полного бэкапа сайта (его файлов и базы данных).
2. Далее попросите поддержку хостинга установить для сайта следующие директивы:
mbstring.internal_encoding = UTF-8
mbstring.func_overload = 2
Можно попробовать внести изменения и самостоятельно одним из следующих способов.
2.1. Первый вариант – для тех, кто использует хостинг Beget.
2.1.1. Авторизуйтесь в панели управления хостингом.
2.1.2. Перейдите в раздел «Сайты».
2.1.3. На открывшейся странице, напротив настраиваемого сайта нажмите на иконку «PHP N», где N – используемая версия PHP на вашем сайте.
2.1.4. В открывшейся форме либо вручную добавьте директивы:
mbstring.internal_encoding = UTF-8
mbstring.func_overload = 2
подобно этому:
либо в блоке «Применить оптимальные настройки для CMS:» выберите «Bitrix UTF-8» и сохраните изменение нажатием на кнопку «Применить».
2.2. Второй вариант – через конфигурационный файл php.ini. О том, как узнать адрес его местоположения на вашем хостинге, написано в этой нашей статье.
В нем вам необходимо найти и раскомментировать строки (удалить перед ними ;) содержащие «mbstring.internal_encoding» и «mbstring.func_overload», после чего значения выставить на «UTF-8» и «2» соответственно, чтобы получилась следующая картина:
mbstring.internal_encoding = UTF-8
mbstring.func_overload = 2
2.3. Третий вариант – через файл .htaccess, который находится в корневой папке сайта.
Если вы используете стандартный файл .htaccess и версия PHP на хостинге до 5.4, то найдите блок, похожий на:
<IfModule mod_php5.c>
php_flag session.use_trans_sid off
#php_value display_errors 1
#php_value mbstring.internal_encoding UTF-8
</IfModule>
И добавьте (или раскомментируйте, если такие строки уже есть, удалив перед ними #) следующие строки:
php_value mbstring.internal_encoding UTF-8
php_value mbstring.func_overload 2
Если вы используете стандартный файл .htaccess и версия PHP на хостинге 7+, то найдите блок, похожий на:
<IfModule mod_php5.c>
php_flag session.use_trans_sid off
#php_value display_errors 1
#php_value mbstring.internal_encoding UTF-8
</IfModule>
и замените его на:
<IfModule mod_php7.c>
php_flag session.use_trans_sid off
php_value mbstring.internal_encoding UTF-8
php_value mbstring.func_overload 2
</IfModule>
Во всех остальных случаях попробуйте просто прописать следующие строки в самый верх этого же файла:
php_value mbstring.internal_encoding UTF-8
php_value mbstring.func_overload 2
2.4. Четвертый вариант – через изменение настроек Apache (httpd.conf) – главный файл конфигурации хостинга/сервера. Его расположение может быть по разным путям, распространенные – это папки /usr/local/etc/apache/ и /etc/httpd/conf/. Более точную информацию на этот счет уточняйте у поддержки хостинга.
В нем для нужного виртуального хостинга (сайта) в блок «VirtualHost» вставьте следующие директивы:
php_admin_value mbstring.internal_encoding UTF-8
php_admin_value mbstring.func_overload 2
3. Авторизуйтесь в панели управления сайтом.
4. Перейдите в раздел «Настройки» – «Настройки продукта» – «Модули».
На открывшейся странице удалите модули (если они используются на вашем сайте) «Поиск» (без сохранения таблиц) и «Веб-Аналитика» (без сохранения таблиц, но с сохранением шаблонов сообщений).
5. Если на вашем сайте установлен модуль «Форум», вам необходимо удалить букву «ё» из словаря транслита. Для этого в левом меню перейдите по пути «Сервисы» – «Форумы» – «Фильтр нецензурных слов» – «Словарь транслита», найдите и удалите букву из списка.
6. Далее переходите в «Настройки» - «Настройки продукта» – «Языковые параметры» – «Региональные настройки».
7. На открывшейся странице находите «ru» в столбце «Название» и щелкаете по нему один раз левой кнопкой мыши.
8. На открывшейся странице, в графе «Кодировка» пишите:
UTF-8
После чего сохраняете изменения нажатием на соответствующую кнопку.
После сохранения у вас (в административной части сайта и на самом сайте) могут появиться знаки вопроса – не пугайтесь, на данном этапе это нормальное явление.
9. Далее подключитесь к вашему сайту по FTP.
10. В папке /bitrix/php_interface/ найдите и откройте файл dbconn.php, после чего сразу после <? добавьте:
define('BX_UTF', true);
Сохраните изменения и отправьте файл обратно на сайт.
11. В папке /bitrix/ найдите и откройте файл .settings.php. В нем блок:
'utf_mode' =>
array (
'value' => false,
'readonly' => true,
),
замените на:
'utf_mode' => array(
'value' => true,
'readonly' => true,
),
Сохраните изменения и отправьте файл обратно на сайт.
12. Скачайте архив в конце статьи, разархивируйте и содержимое (файл convert_utf8.php) загрузите по FTP в корень вашего сайта.
13. Перейдите на вашем сайте (через браузер) к файлу по пути /convert_utf8.php, после чего на открывшейся странице (если в предыдущих шагах нет никаких ошибок) у вас появится страница следующего вида:
13.1. Здесь вы жмете на «Проверка прав доступа» и ждете результата проверки. Если все хорошо (в противном случае будет предложен список файлов, которые запрещены для записи), появится страница следующего вида:
Жмете на «Конвертация файлов в UTF8».
13.2. После того, как процесс конвертации файлов завершиться успехом, вы увидите следующую картину:
Здесь вы жмете на «Конвертация базы данных в UTF8», и если вдруг вас перекинет на ваш сайт с формой входа – авторизовываетесь, введя данные от профиля администратора, после чего вас перекинет обратно на страницу выше, где вы вновь нажимаете «Конвертация базы данных в UTF8».
Процесс конвертации базы данных не быстрый, так что запаситесь терпением. По завершении появится сообщение следующего характера:
14. Возвращаетесь в FTP и удаляете из корневой папки сайта ранее загруженный файл convert_utf8.php.
15. Здесь же (в FTP) откройте файл after_connect.php в папке /bitrix/php_interface/ и строку:
$DB->Query("SET NAMES 'cp1251'");
замените на:
$DB->Query("SET NAMES 'utf8'");
$DB->Query('SET collation_connection = "utf8_unicode_ci"');
Сохраните изменения и отправьте файл обратно на сайт.
16. В этой же папке откройте файл after_connect_d7.php и строку:
$connection->queryExecute("SET NAMES 'cp1251'");
замените на:
$connection->queryExecute("SET NAMES 'utf8'");
$connection->queryExecute('SET collation_connection = "utf8_unicode_ci"');
Сохраните изменения и здесь и отправьте файл обратно на сайт.
18. Выйдите из панели управления сайтом, после чего авторизуйтесь вновь.
19. Установите удаленные из 4 шага модули. Для поиска сделайте переиндексацию (в левом меню «Настройки» – «Поиск» – «Переиндексация» и на открывшейся странице – «Переиндексировать»).
При большом количестве материалов на сайте этот процесс так же не быстрый, поэтому окончания придется подождать некоторое время.
20. Еще раз очистите весь кэш сайта.
21. Дополнительно: если вы используете интеграцию с почтой, в разделе «Сервисы» – «Почта» – «Почтовые ящики», в каждом почтовом ящике во вкладке «Дополнительные настройки», в графе «Кодировка, в которую конвертировать входящую почту», выставьте «(использовать кодировку сайта)».
Вот, собственно, и все. Инструкция тестировалась на 1C-Bitrix версии 18.0.
Остались вопросы? Задать их можете в комментариях под данной статьей.