Как поменять кодировку сайта с windows 1251 на utf 8 битрикс
Рассмотрим общий порядок конвертации сайта с кодировки cp1251 в UTF-8.
Внимание! Прежде чем приступить к конвертации сайта обязательно сделайте резервную копию сайта и базы данных. Настоятельно рекомендуем предварительно потренироваться выполнять конвертацию на отдельной копии сайта. Конвертация сайта сложная операция и каждый случай индивидуален. При её выполнении высока вероятность потерять важные данные, если что-то пойдет не так!
Общий порядок действий
Редактировать файлы и вносить правки на сервере можно подключаясь по SSH.
Общий порядок действий:
-
Настройки > Настройки продукта > Сайты > Список сайтов > [название_сайта] указаны региональные настройки (например, ru). —> В региональных настройках Настройки > Настройки продукта > Языковые параметры > Региональные настройки сменитe кодировку на UTF-8 для всех языков;
mbstring.func_overload до версии 20.100.0 модуля main
php_value mbstring.func_overload 2 php_value mbstring.internal_encoding UTF-8
define("BX_UTF", true);
В этом же файле удалите строки, относящиеся к кодировке cp1251:
setlocale(LC_ALL, 'ru_RU.CP1251'); setlocale(LC_NUMERIC, 'C'); mb_internal_encoding("Windows-1251");
utf_mode => array( 'value' => true, 'readonly' => true, ),
$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.
php_value default_charset 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. Указанный выше пример может не сработать. В этом случае его надо адаптировать под вашу ОС. Например:
// выполняем команду для перекодирования файлов find ./ -type f -name "*.php" -exec bash -c 'file="$1"; iconv -f cp1251 -t utf8 "$file" > "$.tmp" && mv "$.tmp" "$file"' _ <> \;
Использование внешних программ или конвертация файлов вручную
Часто при использовании внешних программ для конвертации в файлы добавляется специальная последовательность символов, так называемый BOM. Эти символы должны находиться только вначале файла, а поскольку итоговая страница является составной из нескольких php файлов, то спецсимволы появляются в теле страницы. Если делаете конвертацию файлов вручную — не сохраняйте с BOM!
Советы и ссылки
Основные шаги по конвертации сайта выполнены. Если после конвертации возникают ошибки при открытии сайта, включите режим отладки ‘debug’ => true в файле /bitrix/.settings.php . Это позволит видеть где и какие возникают ошибки.
Обязательно выполните проверку системы Форма Проверка системы ( Настройки > Инструменты > Проверка системы ) предназначена для всесторонней проверки соответствия параметров системы, на которой осуществляется функционирование проекта, минимальным и рекомендуемым техническим требованиям продукта.
Подробнее в курсе Администратор. Базовый. . По результатам проверки будет видно, что ещё нужно исправить. Пользуйтесь подсказками под знаками вопроса справа.
Если возникли ошибки с таблицами базы данных (последняя строка проверки), можно посмотреть логи в журнале . В конце файла логов будут указаны запросы, с помощью которых можно исправить эти ошибки. Перед началом исправления рекомендуется сделать копию базы данных.
Список ссылок по теме:
- Конвертация сайта из cp1251 в UTF-8 (блог разработчиков);
- Выбор кодировки сайта;
- Настройка параметров ядра;
- Проверка системы в курсе Администратор. Базовый.
- Как изменить кодировку базы данных MySQL?.
ip_suvorov
эти вещи нельзя менять через .htaccess начиная с версии PHP 5.2.9.
Зависит от хостинга. Например на таймвебе можно. там патч стоит.
( 2 comments — Leave a comment )
17 Mar 2014, 17:19
Зависит от хостинга. Например на таймвебе можно. там патч стоит.
17 Feb 2013, 05:35
Hey Stranger! This is Liza. CALL ME! Go Here welcomemyhomecat.blogspot.com
9 Mar 2011, 17:44
* php_value mbstring.func_overload 2
* php_value mbstring.internal_encoding UTF-8
эти вещи нельзя менять через .htaccess начиная с версии PHP 5.2.9.
Смена кодировки Битрикс на UTF8

Довольно часто встречаемся с ситуацией, когда сайт использует кодировку cp1251, хотя «1C-Битрикс» уже с десяток лет поддерживает кодировку UTF-8. В основном это довольно старые проекты, которые работают и эволюционируют до сих пор, но перейти на UTF-8 не могли из-за кажущихся технических сложностей.
Сегодня расскажу о технической части вопроса, применив которую, вы сможете сконвертировать сайт на Битрикс в кодировку UTF-8.
Но прежде хочу выразить благодарность Волкову Сергею и Шаромову Денису, материалы которых помогли в подготовке этой статьи.
Внимание! Редактировать файлы сайта необходимо через ftp или ssh.
А теперь приступим.
1. Сделайте резервную копию и обязательно включите в нее базу данных и все файлы сайта.
2. Если вы используете витруальный хостинг, попросите техподдержку установить следующие параметры:
mbstring.func_overload 2
mbstring.internal_encoding UTF-8
3. Удалите модули «Поиск» без сохранения таблиц и «Веб-аналитика» (без сохранения таблиц, но с сохранением шаблонов сообщений).

4. Удалить из словаря транслита в модуле «Форум» (Сервисы > Форумы > Фильтр нецензурных слов > Словарь транслита) букву ‘ё’, которая имеет >

5. Изменить в региональных настройках кодировку с windows-1251 на utf-8.
В настройках сайта обязательно должна быть выбрана соответствующая региональная настройка.
6. Добавить в /bitrix/php_interface/dbconn.php:
define("BX_UTF", true);
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` = 'database_name' ORDER BY 1

Где database_name — имя вашей база данных.
Этот запрос выведет на страницу новый запрос, который нужно будет выполнить на этой же странице:
Копируйте все строки нового запроса (не забудьте отключить ограничение на вывод количества записей на странице) и выполните полученный новый запрос. По завершении выполнения все таблицы базы будут переведены в кодировку UTF-8.
$DB->Query("SET NAMES 'utf8'"); $DB->Query('SET collation_connection = "utf8_unicode_ci"');
$connection->queryExecute("SET NAMES 'utf8'"); $connection->queryExecute('SET collation_connection = "utf8_unicode_ci"');
return array ( 'utf_mode' => array ( 'value' => true, 'readonly' => true, ),
12. Удалите скрипт convert_utf8.php.
13. Установите модуль «Поиск» и сделайте переиндексацию.
14. Установить модуль «Веб-аналитика», если вы его использовали ранее.
Готово!
После конвертации сайта могут возникнуть проблемы с сериализованными массивами (в основном это свойства Html-текст и настройки отображения для пользователей в админке). В таком случае вам поможет вот этот скрипт.
Как исправить неверную кодировку сайта
Кодировка сайта — это свойство веб-ресурса, благодаря которому пользователь может увидеть понятный ему текст на экране монитора.
Две самые популярные кодировки, которые сейчас используются на сайтах:
- UTF-8
- Windows-1251 (ANSI или CP1251)
Владельцу сайта следует знать важное правило кодировки, действующее для всего проекта — кодировки базы данных, файлов и подключения к базе данных обязательно должны совпадать.
Например, если на одном ресурсе в базе данных будет применена одна кодировка, а для файлов другая, то информация на сайте может отобразится некорректно:

Как исправить?
Существует несколько этапов решения проблемы с неправильной кодировкой: необходимо привести все кодировки (файлов, самого сайта, базы данных, подключения к базе данных) к единой, далее мы укажем ссылки на статьи, как это сделать или непосредственно напишем какие действия необходимо произвести:
- Указать кодировку в meta-теге. Чтобы браузер распознал, в какой кодировке находится информация веб-сайта, Вам следует поставить параметр:
.
В нашем примере в атрибуте charset прописана кодировка UTF-8.
- Изменить кодировку сайта с помощью файла .htaccess в корне сайта с кодом:
AddDefaultCharset utf-8 - Установить кодировку файлов можно через текстовый редактор например, Notepad++. Чтобы сменить кодировку ANSI на UTF-8 Вам потребуется открыть нужный файл через Notepad++, выбрать в верхнем меню «Кодировки» и в появившемся меню кликнуть «преобразовать в UTF-8 без BOM». Эти действия необходимо сделать со всеми файлами сайта.

- Изменить кодировку базы данных MySQL
- Установить кодировку соединения с базой. При каждом подключении сайта к MySQL нужно, чтобы последовательно выполнялись примерно такие (в случае кодировки UTF-8) запросы:
SET NAMES UTF8
SET CHARACTER SET UTF8
SET character_set_client = UTF8
SET character_set_connection = UTF8
SET character_set_results = UTF8 В PHP это реализуется примерно так:
$mysqli = new mysqli($server, $username, $password, $basename);
$mysqli->query(«SET NAMES UTF8»);
$mysqli->query(«SET CHARACTER SET UTF8»);
$mysqli->query(«SET character_set_client = UTF8»);
$mysqli->query(«SET character_set_connection = UTF8»);
$mysqli->query(«SET character_set_results = UTF8»);
После произведенных выше действий информация на сайте должна отображаться корректно. Обратите внимание, что если вы перекодируете базу данных или файлы, данные в которых повреждены, например, вместо букв отображаются так называемые «кракозябры», то перекодирование указанным выше способом не приведет к желаемому результату, его необходимо выполнять с неповрежденными данными.
Арендовать VPS сервер Вы можете на нашем сайте.
