Yandex Metrika
sanches.free 21 просмотр

Смена кодировки данных в 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 дней гарантии