При работе с контентом на сайтах, созданных на основе CMS 1С-Битрикс, нередко возникает необходимость автоматически обрезать длинные строки или аккуратно разбивать текст на части (например, когда слова слишком длинные и «ломают» верстку). В стандартном функционале Битрикс есть две удобные функции, которые помогут справиться с этими задачами:

- TruncateText – для сокращения строки до заданной длины и добавления троеточия.
- InsertSpaces – для вставки пробелов (или других символов) в длинные слова, чтобы они аккуратно переносились.
Рассмотрим подробнее каждую из них.
1. Функция TruncateText
Функция TruncateText
предназначена для того, чтобы «отрезать» все лишнее из строки, превышающей заданную длину, и при необходимости добавить троеточие ("..."
) в конце строки.
/**
* Отсекает от строки все символы свыше указанной длины.
* Если отсечение произошло, то к строке справа дописывается многоточие.
*
* @param string $strText Исходная строка.
* @param int $intLen Длина конечной строки.
*
* @return string
*/
function TruncateText($strText, $intLen)
{
if(mb_strlen($strText) > $intLen)
return rtrim(mb_substr($strText, 0, $intLen), ".")."...";
else
return $strText;
}
Функция:
- Использует
mb_strlen
иmb_substr
– это важно для корректной работы с многобайтовыми кодировками (UTF-8 и другими). rtrim(..., ".")
убирает возможные точки в конце усеченной строки, чтобы не было дублирования, когда мы добавляем троеточие.- При условии, что длина строки (с помощью
mb_strlen
) больше$intLen
, возвращается обрезанный вариант с троеточием; иначе – исходная строка.
Примеры использования TruncateText
- Базовый пример:
<? $str = "1234567890"; echo TruncateText($str, 7); // Результат: 1234567... ?>
- Использование в шаблоне для вывода анонса новости:
<? // Предположим, у нас есть переменная $arItem["PREVIEW_TEXT"] // с анонсом новости, но он может быть слишком длинным. echo TruncateText($arItem["PREVIEW_TEXT"], 100); // Выведется не более 100 символов анонса, затем "...". ?>
- Использование в компоненте для обрезки названия товара:
<? $productName = "Очень длинное название товара, которое не помещается в блоке"; $shortName = TruncateText($productName, 30); ?> <div class="catalog-item__title"><?=$shortName?></div>
- Обрезка пользовательского ввода в форме:
<? if ($_SERVER["REQUEST_METHOD"] == "POST") { $comment = TruncateText($_POST["USER_COMMENT"], 250); // Далее сохраняем $comment в базу или обрабатываем иным способом } ?>
2. Функция InsertSpaces
Функция InsertSpaces
разбивает слишком длинные слова внутри текста, вставляя заданный символ (по умолчанию пробел) каждые N символов. Если в тексте встречаются слова, длиннее установленной длины, функция автоматически их «разбивает». Это особенно полезно при отображении длинных ссылок, технических терминов, артикулов и т. д., чтобы они не «выпирали» за границы блока.
/**
* Разбивает длинные слова в тексте. Возвращает текст, в котором
* максимальная длина каждого слова не превышает заданную длину.
*
* @param string $sText Исходный текст.
* @param int $iMaxChar Максимальное количество символов в слове.
* @param string $symbol Символ, которым будут разбиваться слова.
* @param bool $bHTML Учитывать ли HTML-теги (с версии 9.5.0).
*
* @return string
*/
function InsertSpaces($sText, $iMaxChar=80, $symbol=" ", $bHTML=false)
{
$iMaxChar = intval($iMaxChar);
if ($iMaxChar > 0 && mb_strlen($sText) > $iMaxChar)
{
if ($bHTML)
{
// Если нужно корректно работать с HTML-тегами,
// используется специальный класс CSpacer.
$obSpacer = new CSpacer($iMaxChar, $symbol);
return $obSpacer->InsertSpaces($sText);
}
else
{
// Разбивает слова по регулярному выражению.
// BX_UTF_PCRE_MODIFIER – это флаг Bitrix для UTF-8 (обычно 'u').
return preg_replace(
"/([^() \\n\\r\\t%!?{}\\][-]{".$iMaxChar."})/".BX_UTF_PCRE_MODIFIER,
"\\1".$symbol,
$sText
);
}
}
return $sText;
}
Ключевые моменты:
- Параметр
$iMaxChar
отвечает за максимальную длину каждого слова. - Параметр
$symbol
определяет, каким символом будет разбиваться слово (пробел, перенос строки, дефис и т. д.). - Параметр
$bHTML
(начиная с версии 9.5.0) при значенииtrue
учитывает структуру HTML, чтобы не разрывать теги. Для этого внутри функции используется классCSpacer
, который умеет корректно обрабатывать HTML-теги.
Примеры использования InsertSpaces
- Простейший случай:
<? $str = "1234567890 1234 123456"; echo InsertSpaces($str, 5); // Результат: "12345 67890 1234 12345 6" ?>
- Замена на перенос строки:
<? $str = "ОченьДлинноесловобезпробелов"; // Вместо пробела используем \n (символ новой строки) echo nl2br(InsertSpaces($str, 5, "\n")); ?>
- Использование внутри HTML:
<? // Предположим, у нас есть длинный абзац с тегами <b>...</b> $htmlContent = "<b>СуперДлинноеСловоДляПримера</b> без тегов"; // Если мы хотим корректно сохранить тег <b>, нужно передать $bHTML = true echo InsertSpaces($htmlContent, 5, " ", true); ?>
- Разбиение ссылок:
<? $longLink = "https://verylongdomainname1234567890.com/some/verylongurlpart.html"; $correctedLink = InsertSpaces($longLink, 15, " "); echo $correctedLink; ?>
- Использование в админке для ввода данных:
<? $arFields = [ "DESCRIPTION" => InsertSpaces($_POST["DESCRIPTION"], 50, " ", false) ]; // $arFields далее сохраняем в инфоблок или базу ?>
Где найти функции в Bitrix
По умолчанию, исходный код обеих функций можно найти в файле:
bitrix/modules/main/tools.php
Внутри этого файла реализованы многие полезные инструменты для работы с текстом, строками, датами и т. д. При необходимости их можно дополнительно доработать под нужные задачи, но в большинстве случаев функционала «из коробки» хватает.
Советы по использованию
- Учитывайте кодировку
Всегда проверяйте, что сайт работает в кодировке UTF-8 (самая распространенная в современных проектах). Использование
mb_strlen
иmb_substr
вместо обычныхstrlen
иsubstr
– хороший признак, что все будет корректно для кириллических и иных символов. - Берегитесь слишком жесткой обрезки Если вы обрезаете очень короткие строки или заметки (до 5–10 символов), рискуете потерять смысл. Возможно, лучше показывать их целиком или указывать пользователю, что поле должно быть короче.
- Настраивайте символы для разбивки
Для InsertSpaces можно использовать не только пробел, но и неразрывный пробел
\n
или любой другой символ (например, дефис-
). Все зависит от контекста задачи и специфики верстки. - Опция
HTML = true
Если на вашем сайте контент содержит сложную HTML-верстку и вы боитесь повредить теги, используйте$bHTML = true
. При этом учитывайте, что для правильной работы требуется специальный классCSpacer
, который есть в составе модуля «main» Битрикс. - Комбинация функций В отдельных случаях может понадобиться сначала обрезать строку, а затем разбить оставшееся слово. Или наоборот – сначала «разорвать» слишком длинные слова, а потом убедиться, что итоговый результат не превысил нужного размера. Порядок операций зависит от вашего сценария и формата данных.
Заключение
Функции TruncateText и InsertSpaces являются удобными помощниками при работе с длинными и громоздкими строками в 1С-Битрикс. Они не только упрощают жизнь разработчикам, но и помогают сохранять аккуратный внешний вид сайта при отображении пользователям.
Если требуется вывести в шаблоне или компоненте длинное описание, имя пользователя, название товара или любой другой текст, который может нарушить верстку, — смело обращайтесь к этим функциям. Они легко настраиваются и позволяют быстро добиться нужного результата.
Пользуйтесь на здоровье, следите за корректностью кодировки и не стесняйтесь комбинировать разные методы обработки текста, чтобы выдавать пользователям красивый и удобочитаемый контент!