Назад

Вывод свойства типа HTML в Битрикс

Главная
Блог
Вывод свойства типа HTML в Битрикс

При работе с инфоблоками в Битрикс разработчики часто сталкиваются с проблемой корректного вывода свойств типа HTML/текст. В этой статье рассмотрим современные методы решения этой задачи с учетом последних версий платформы и требований безопасности.

Проблема вывода HTML-свойств

Когда вы создаете свойство инфоблока типа HTML/текст и пытаетесь вывести его значение стандартным способом:

echo $arResult["PROPERTIES"]["DESCRIPTION"]["VALUE"];

вы получаете HTML-безопасный вид текста (с преобразованными символами, например, " вместо кавычек). Это происходит потому, что Битрикс по умолчанию применяет функцию htmlspecialchars для защиты от XSS-атак.

Метод 1: Использование поля ~VALUE

Самый простой способ получить исходный HTML — использовать поле ~VALUE вместо VALUE:

echo $arResult["PROPERTIES"]["DESCRIPTION"]["~VALUE"];

Это поле содержит необработанное значение свойства без экранирования. Однако при таком подходе важно помнить о безопасности.

Метод 2: Функция htmlspecialcharsBack

При работе с API CIBlockElement можно использовать функцию htmlspecialcharsBack:

if(CModule::IncludeModule('iblock')) {
    $arSelect = ["ID", "NAME", "DESCRIPTION"];
    $res = CIBlockElement::GetList([], ["IBLOCK_ID"=>5], false, false, $arSelect);
    
    while($ob = $res->GetNextElement()) {
        $arFields = $ob->GetFields();
        echo htmlspecialcharsBack($arFields["DESCRIPTION"]);
    }
}

Современные методы (D7)

В новых версиях Битрикс рекомендуется использовать ORM D7:

use Bitrix\Iblock\Elements\ElementTable;

$elements = ElementTable::getList([
    'select' => ['ID', 'NAME', 'DESCRIPTION'],
    'filter' => ['IBLOCK_ID' => 5]
]);

while ($element = $elements->fetch()) {
    echo $element['DESCRIPTION']['TYPE'] == 'HTML' 
        ? $element['DESCRIPTION']['~VALUE'] 
        : $element['DESCRIPTION']['VALUE'];
}

Безопасность при выводе HTML

При выводе HTML-контента важно учитывать риски XSS-атак. Рекомендуемые меры:

  1. Очистка HTML:

$safeHtml = \Bitrix\Main\Security\Sanitizer::sanitizeHtml(
    $arResult["PROPERTIES"]["DESCRIPTION"]["~VALUE"],
    ['SAFE' => true]
);

  1. Использование компонента main.include:

$APPLICATION->IncludeComponent(
    "bitrix:main.include",
    "",
    [
        "AREA_FILE_SHOW" => "file",
        "PATH" => $arResult["PROPERTIES"]["DESCRIPTION"]["~VALUE"]["TEXT"],
        "EDIT_TEMPLATE" => ""
    ]
);

  1. Проверка прав доступа перед выводом.

Оптимизация производительности

При работе с HTML-свойствами учитывайте:

  1. Кэширование вывода:

if ($this->StartResultCache()) {
    $this->arResult["HTML_CONTENT"] = htmlspecialcharsBack($arFields["DESCRIPTION"]);
    $this->IncludeComponentTemplate();
}

  1. Использование CIBlockElement::GetProperty для выборочной загрузки свойств.

Заключение

Вывод HTML-свойств в Битрикс требует внимания как к корректности отображения, так и к вопросам безопасности. Современные методы работы с ORM D7 предоставляют удобные инструменты для решения этих задач, а встроенные механизмы безопасности помогают защитить сайт от уязвимостей.

При реализации всегда учитывайте:

  • необходимость экранирования вывода

  • требования безопасности

  • производительность при работе с большими объемами HTML-контента

Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Читайте по теме
Все статьи
Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Все статьи