Смена кодировки данных в D7: \Bitrix\Main\Text\Encoding
Зачем не iconv напрямую
В обменах, почтовых заголовках и старых модулях строки часто уже в UTF-8, тогда как в настройках конкретного сайта в многосайтовости задан другой CHARSET. Ядро «1С‑Битрикс» даёт статические методы \Bitrix\Main\Text\Encoding, которые кроме скаляров рекурсивно обходят массивы и переводят и ключи, и значения — это экономит ошибки при подготовке $arFields для API и сохранении в БД под LANG_CHARSET.
Явное направление: UTF-8 → кодировка сайта
Константа LANG_CHARSET доступна после подключения пролога и отражает кодировку языка текущего сайта. Типичный сценарий: внутри приложения массив уже в Unicode, а сохранять нужно так, как ожидает окружение с LANG_CHARSET.
use Bitrix\Main\Text\Encoding;
$arFields = Encoding::convertEncoding($arFields, 'UTF-8', LANG_CHARSET);Имена кодировок передаются в том виде, который поддерживает внутренний слой конвертации ядра; для Unicode обычно указывают UTF-8 или utf-8 — регистр в типовых кейсах не критичен, главное быть последовательным в проекте.
Вход пользователя без ручного «откуда»
Если нужно привести строку к текущей кодировке и допустимо автоопределение UTF-8, используйте метод convertEncodingToCurrent(): он удобен для полей из HttpRequest, когда смешанный ввод уже близок к UTF-8, но финальное представление должно совпасть с charset сайта.
use Bitrix\Main\Text\Encoding;
use Bitrix\Main\Context;
$request = Context::getCurrent()->getRequest();
$MESSAGE = Encoding::convertEncodingToCurrent((string)$request->getPost('MESSAGE'));Современный UTF-8 и когда вызов всё равно нужен
На новых установках интернет-магазин и публичка почти всегда на UTF-8: тогда пара «utf-8 → LANG_CHARSET» вырождается в отсутствие изменений и вызов дешёвый. Методы всё равно полезны в миграциях и модулях обмена, где массивы приходят из внешнего контура или из legacy с Windows-1251/KOI8-R. Для деревьев данных с особой политикой ошибок иногда остаются iconv и mb_convert_encoding; см. также материалы про рекурсивный обход массивов.
На что смотреть в отладке
- Проверяйте реальное значение
LANG_CHARSETна нужном сайте (мультисайтовость). - После конвертации ключей возможны коллизии имён ключей — контролируйте дерево до записи.
- Пустые строки и
nullметоды должны переваривать предсказуемо; бинарные поля через конвертацию текста не прогоняйте.
Не хотите копаться сами?
Починю за 1-3 дня. Без предоплаты — оплата по результату.
15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии