Как конвертировать сайт на «Битрикс» из cp1251 в UTF-8
Издержки свободы выбора. За те годы, пока преимущества формата UTF-8 сделались очевидны большинству разработчиков и многим заказчикам, были произведены многие тысячи сайтов в кодировке cp1251. Со временем их владельцы приходят к пониманию выгод использования UTF-8 и принимают решение сменить кодировку материалов сайта. Как это сделать на практике?
1. Подготовка
Конвертацию выполняет модуль mbstring. Для его работы необходимо установить параметр
Если вы используете для хостинга VPS-сервер, то параметр легко настроить в php.ini. Если нет, то ситуация усложняется. Будьте особо внимательны: с версии php 5.2.8 параметр меняется глобально на весь сервер. Обратитесь к хостеру, но не соглашайтесь на использование CGI.
Сделайте реззервную копию сайта и выполняйте конвертацию именно на ней. В случае неудачи данные основного сайта не пострадают.
2. Задание параметров конвертации
Задайте язык сайта, формат даты и кодировку.
3. Настройте dbconn.php
В файле в /bitrix/php_interface/dbconn.php добавьте строку
4. Настройте кодировку сайта
В настройках сайта смените кодировку с windows-1251 на utf-8.
5. Настройте кодировку языка
В настройках языка смените кодировку с windows-1251 на utf-8.
6. Конвертируйте файлы в utf-8
7. Конвертируйте ьазу данных в utf-8
8. Отредактируйте файл after_connect.php
В файле /bitrix/php_interface/after_connect.php найдите строку
$DB->Query(«SET NAMES ‘cp1251′»
И замените на строку
$DB->Query(«SET NAMES ‘utf8′»
9. Очистите кэш всего сайта
10. Выйдите из сеанса работы с панелью управления, закройте браузер, потом откройте его и снова зайдите на сайт.
Обратите внимание: если конвертируете файлы в utf-8 вручную, не сохраняйте специальную последовательность BOM.
Правильная смена кодировки 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, то найдите блок, похожий на:
php_flag session.use_trans_sid off #php_value display_errors 1 #php_value mbstring.internal_encoding UTF-8
И добавьте (или раскомментируйте, если такие строки уже есть, удалив перед ними #) следующие строки:
php_value mbstring.internal_encoding UTF-8 php_value mbstring.func_overload 2
Если вы используете стандартный файл .htaccess и версия PHP на хостинге 7+, то найдите блок, похожий на:
php_flag session.use_trans_sid off #php_value display_errors 1 #php_value mbstring.internal_encoding UTF-8
и замените его на:
php_flag session.use_trans_sid off php_value mbstring.internal_encoding UTF-8 php_value mbstring.func_overload 2
Во всех остальных случаях попробуйте просто прописать следующие строки в самый верх этого же файла:
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
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 шага модули. Для поиска сделайте переиндексацию (в левом меню «Настройки» – «Поиск» – «Переиндексация» и на открывшейся странице – «Переиндексировать»).

При большом количестве материалов на сайте этот процесс так же не быстрый, поэтому окончания придется подождать некоторое время.
21. Дополнительно: если вы используете интеграцию с почтой, в разделе «Сервисы» – «Почта» – «Почтовые ящики», в каждом почтовом ящике во вкладке «Дополнительные настройки», в графе «Кодировка, в которую конвертировать входящую почту», выставьте «(использовать кодировку сайта)».
Вот, собственно, и все. Инструкция тестировалась на 1C-Bitrix версии 18.0.
Остались вопросы? Задать их можете в комментариях под данной статьей.
Изменение кодировки сайта на Битрикс CP_1251 на UTF-8
Убедитесь, что сайт дествительно работает в кодировке cp_1251. Для этого откройте любую страницу сайта (кроме администраторского раздела) и просмотрите исходный код страницы (Chrome, Firefox: CTRL (Cmd) +U, Safari: Cmd+option+U, Internet Exporer: F12).
Далее найти строку «charset www-домены»).
Редактирование php.ini для выбранной версии режиме PHP вашего сайта:

В администраторской панели сайта требуется удалить модули «Поиск» (без сохранения таблиц) и «Веб-аналитика» (без сохранения таблиц, но с сохранением шаблонов сообщений).
Затем из словаря транслита в модуле «Форум» («Сервисы» > «Форумы» > «Фильтр нецензурных слов» > «Словарь транслита») удалить букву «ё», которая имеет >
После измените кодировку с windows-1251 на utf-8 в в региональных настройках сайта.
Добавить строку define(«BX_UTF», true); в файл /bitrix/php_interface/dbconn.php
После загрузите в корневую директорию сайта данный скрипт и запустите его. Нужно дождаться полного выполнения.
Региональные настройки /bitrix/admin/culture_admin.php?lang=ru
Похожие материалы
- Кодировка сайта 1С Битрикс
- Ошибка сравнения кодировки базы utf8_general_ci отличается от сравнения для соединения
- Ошибка кодировки таблиц без возможности автоматического исправления
Концепция и все материалы с сайта btrxboost.com включающие в себя текстовую, графическую, видео, аудио и маркетинговую информацию, защищены российским и международным законодательством. В соответствии с соглашением об охране авторских прав и интеллектуальной собственности (ст. №1259, №1260, гл. 70 “Авторское право” ГК РФ от 18.12.2006 № 230-ФЗ) и согласно сертификату собственности авторских прав на информационные материалы RID 07N-4M-48 от 12.08.2012, а также сертификата DMCA id: f25cb914-aba8-4988-a116-13afb399bba2 от 21.06.2019.
В случае нарушений данных правил, применяются следующие меры: подача официального заявления в судебные органы в т.ч. с эскалацией запроса хостинг-провайдеру на котором расположен сайт-нарушитель, а также подача запроса на исключение сайта-нарушителя из поисковых систем согласно “Online Copyright Infringement Liability Limitation Act” по ч. II, раздел 512 к закону об авторском праве по DMCA.
Смена кодировки Битрикса с windows-1251 в UTF-8 (utf8)

Почему-то Битрикс продолжает разрабатываться на кодировке windows-1251, хотя для seo рекомендуется UTF-8.
Случилось мне повозиться над сменой кодировки проекта на Битриксе с windows-1251 (cp1251) на UTF-8 (utf-8). Расскажу как всё прошло.
1. Резервные копии файлов и БД
Сначала сделать все резервные копии: файлов сайта и базы данных, чтобы откатиться, если что-то пойдёт не так. У меня «не так» пошло 🙂 и да резервные копии очень пригодились. Никогда не знаешь, чего ждать от битрикса.
2. php.ini и .htaccess
Попросить техподдержку вашего хостинга прописать в php.ini следующие строки (на REG.RU вы можете сами это сделать в папке php-bin/php.ini)
mbstring.func_overload=2 mbstring.internal_encoding=utf-8
В файл /.htaccess добавить строки:
php_value mbstring.func_overload 2 php_value mbstring.internal_encoding UTF-8
3. Удалить модули поиска и веб-аналитики
Удалите модули «Поиск» без сохранения таблиц и «Веб-аналитика» (без сохранения таблиц, но с сохранением шаблонов сообщений).
4. Удалить букву ё
Удалить из словаря транслита в модуле «Форум» (Сервисы > Форумы > Фильтр нецензурных слов > Словарь транслита) букву ‘ё’, которая имеет >
5. Перекодировать всю базу данных в UTF-8
Сменить кодировку базы данных, типов полей с cp1251 на utf8: это можно делать на сервере или локально. Я делал локально, потом импортировал базу уже исправленную в кодировку utf8. Здесь в помощь команда
SELECT CONCAT('ALTER TABLE `', t.`TABLE_SCHEMA`, '`.`', t.`TABLE_NAME`, '` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;') as sqlcode FROM `information_schema`.`TABLES` t WHERE 1 AND t.`TABLE_SCHEMA` = 'database_name' ORDER BY 1
где database_name — имя вашей база данных.
Этот запрос выведет на страницу новый запрос, который нужно будет выполнить на этой же странице.
Копируйте все строки нового запроса (выбрав выводить все запросы на одной странице) и выполните полученный новый запрос. По завершении выполнения все таблицы базы будут переведены в кодировку UTF-8.
Проверить и посмотреть какая кодировка у таблиц в БД можно через phpmyadmin, выполнив SQL
SHOW VARIABLES LIKE 'char%';
SHOW VARIABLES LIKE 'collation%'
а поменять, если где-то увидите latin1 можно командой
set collation_server = 'utf8_general_ci';
6. after_connect
Пропишите в /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:
$connection->queryExecute("SET NAMES 'utf8'"); $connection->queryExecute('SET collation_connection = "utf8_unicode_ci"');
7. Пропишите в /bitrix/.settings.php:
return array ( 'utf_mode' => array ( 'value' => true, 'readonly' => true, ),
8. Сходите на турники сделайте подтягивания
9. Рекурсивная смена кодировки файлов в папке и вложенных папках с windows-1251 в UTF-8 (utf8).
Можно вручную в среде разработки, а можно скриптом по ssh. Создаем файл iconv.sh с содержимым:
# !/bin/sh find $1 -type f -name '*.'$2 -o -name '*.'$2 | while read i do echo $i iconv -f cp1251 -t utf8 -o "$i.new" "$i" && mv -f "$i.new" "$i" done
Тут может возникнуть дальше ошибка, если вы создали файл в Windows. Может такая ошибка выдаться при попытке запустить скрипт уже на сервере:
sh done syntax error unexpected token 'done'
line 8: syntax error: unexpected end of file
Надо просто убрать лишние невидимые символы , которые добавил windows в ваш файл.
Наберите od -a test.sh, чтобы увидеть эти символы невидимые.
$ od -a test.sh 0000000 # ! / b i n / b a s h cr nl # sp cr 0000020 nl w h i l e sp : cr nl d o cr nl sp sp 0000040 sp sp e c h o sp " P r e s s sp [ C 0000060 T R L + C ] sp t o sp s t o p " cr 0000100 nl sp sp sp sp s l e e p sp 1 cr nl d o 0000120 n e cr nl 0000124
Из-за них файл не исполняется, вот как windows подпортил наш файл sh. Можете выполнить команду для вашего файла, которая очистит его.
$ dos2unix test.sh
Но если этой функции не установлено на сервере, то создайте файлик через консоль.
Открыть новый файл с именем iconv2.sh
nano -w iconv2.sh
Введите код, вручную напечатайте
# !/bin/sh find $1 -type f -name '*.'$2 -o -name '*.'$2 | while read i do echo $i iconv -f cp1251 -t utf8 -o "$i.new" "$i" && mv -f "$i.new" "$i" done
Для выхода и сохранения файла нажмите
CTRL + X потом Y и потом Enter
Сделайте файл исполняемым командой (Нужно дать этому файлу разрешение на выполнение как программы.)
chmod +x iconv2.sh
Далее через терминал запускаем наш скрипт
sh iconv2.sh folder js
sh – запускает сам скрипт
iconv.sh – название файла скрипта
folder – путь к той папке, файлы которой нам нужно перекодировать, этот путь может выглядеть так, например, ../server/project – перекодирует все файлы в папке server/project, которая находиться в домашней директории юзера (пользователя системы)
js – расширение файлов, которые нужно переконвертировать.
10. dbconn
В файл /bitrix/php_interface/dbconn.php добавить строки:
define("BX_UTF", true);
11. Админка Битрикса
В админке битрикса изменить в настройках языка ru кодировку с windows-1251 на utf-8
12. Очистить кеш сайта, выйти и войти в админку
13. Установить модуль поиска и сделать переиндексацию
- http://rushstudio.by/blog/development/smena-kodirovki-bitriks-na-utf8/
- https://dev.1c-bitrix.ru/learning/course/?COURSE_ID=43&LESSON_ID=2919
- http://omelchuck.ru/nastrojka-mysql-dlya-raboty-s-utf8/
- http://owb-rotor.ru/2012/04/zametki-na-polyax-rekursivno-perekodiruem-fajly-v-papke-i-vlozhennyx-papkax-s-kodirovki-windows-1251-v-utf-8-utf8/index.html
Источник: loco.ru

almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.
