При работе с инфоблоками в Битрикс разработчики часто сталкиваются с проблемой корректного вывода свойств типа 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-атак. Рекомендуемые меры:
-
Очистка HTML:
$safeHtml = \Bitrix\Main\Security\Sanitizer::sanitizeHtml(
$arResult["PROPERTIES"]["DESCRIPTION"]["~VALUE"],
['SAFE' => true]
);-
Использование компонента main.include:
$APPLICATION->IncludeComponent(
"bitrix:main.include",
"",
[
"AREA_FILE_SHOW" => "file",
"PATH" => $arResult["PROPERTIES"]["DESCRIPTION"]["~VALUE"]["TEXT"],
"EDIT_TEMPLATE" => ""
]
);-
Проверка прав доступа перед выводом.
Оптимизация производительности
При работе с HTML-свойствами учитывайте:
-
Кэширование вывода:
if ($this->StartResultCache()) {
$this->arResult["HTML_CONTENT"] = htmlspecialcharsBack($arFields["DESCRIPTION"]);
$this->IncludeComponentTemplate();
}-
Использование
CIBlockElement::GetPropertyдля выборочной загрузки свойств.
Заключение
Вывод HTML-свойств в Битрикс требует внимания как к корректности отображения, так и к вопросам безопасности. Современные методы работы с ORM D7 предоставляют удобные инструменты для решения этих задач, а встроенные механизмы безопасности помогают защитить сайт от уязвимостей.
При реализации всегда учитывайте:
-
необходимость экранирования вывода
-
требования безопасности
-
производительность при работе с большими объемами HTML-контента