Универсальные функции для обработки строк и текста в 1С-Битрикс: разбор и примеры использования (TxtToHTML и HTMLToTxt)

Работа с текстом — неотъемлемая часть создания контента, особенно когда речь идёт о публикации материалов в рамках CMS 1С-Битрикс. Нередко возникает необходимость преобразовывать обычный текст в корректный HTML-код, а иногда, наоборот, «очищать» HTML и превращать его в читабельный текст. Для решения этих задач в «1С-Битрикс: Управление сайтом» предусмотрены специальные функции — TxtToHTML и HTMLToTxt.

Функции для обработки строк и текста: TxtToHTML и HTMLToTxt

В данной статье мы подробно рассмотрим назначение этих функций, их параметры и разберём реальные кейсы, где подобные инструменты оказываются крайне полезны.

1. Функция TxtToHTML

Функция TxtToHTML позволяет превратить обычный текст (в том числе с особыми тегами, ссылками и т. п.) в корректный HTML-код с учётом базового форматирования. Это может пригодиться, когда вы принимаете текст от пользователей и хотите адаптировать его для веб-страницы — например, в комментариях к статьям, на форумах, в отзывам к товарам и т. д.

Сигнатура функции:

string TxtToHTML(
    string text,
    bool make_url = true,
    int max_string = 0,
    string quote_tag_enabled = "N",
    string not_convert_amp = "Y",
    string code_tag_enabled = "N",
    string biu_tags_enabled = "N",
    string quote_table_class = "quotetable",
    string quote_head_class = "tdquotehead",
    string quote_body_class = "tdquote",
    string code_table_class = "codetable",
    string code_head_class = "tdcodehead",
    string code_body_class = "tdcodebody",
    string code_textarea_class = "codetextarea",
    string link_class = "txttohtmllink",
    array event = array()
);

Описание основных параметров:

  1. text — входной текст, который мы хотим конвертировать в HTML.
  2. make_url (по умолчанию true) — автоматическое преобразование URL и email-адресов в кликабельные ссылки.
  3. max_string (по умолчанию 0) — максимальная длина слова. Все слова длиннее этого значения будут автоматически «разбиваться» на части через пробел.
  4. quote_tag_enabled (по умолчанию "N") — преобразовывать ли спец. тег <QUOTE>...</QUOTE> в стилевую HTML-таблицу.
  5. code_tag_enabled (по умолчанию "N") — аналогично предыдущему пункту, но для тега <CODE>...</CODE>.
  6. biu_tags_enabled (по умолчанию "N") — преобразовывать ли теги <b>, <i>, <u> в соответствующие HTML-теги.
  7. not_convert_amp (по умолчанию "Y") — если значение "Y", символ & не будет конвертироваться в &.
  8. quote_table_class, quote_head_class, quote_body_class, code_table_class, code_head_class, code_body_class, code_textarea_class, link_class — различные CSS-классы для оформления таблиц, ячеек, текстовых областей, ссылок и т. п.
  9. event — массив для указания событий, которые нужно фиксировать при клике по ссылкам (если make_url = true).

Пример использования TxtToHTML:

Допустим, у нас есть строка со смешанным контентом:

$text = "
текст текст текст текст
длиннноесловодлиннноеслово
<code>код код код</code>
<quote>цитата цитата цитата</quote>
<b>жирный текст</b>
<i>курсив</i>
<u>подчёркнутый</u>
ссылка: http://www.1c-bitrix.ru
email: support@1c-bitrix.ru
";
echo TxtToHTML(
    $text,
    true,         // make_url
    20,           // max_string
    "Y",          // quote_tag_enabled
    "N",          // not_convert_amp
    "Y",          // code_tag_enabled
    "Y",          // biu_tags_enabled
    "quotetable",
    "tdquotehead",
    "tdquote",
    "codetable",
    "tdcodehead",
    "tdcodebody",
    "codetextarea"
);

Результат получится примерно такой (приведём основную часть, опуская служебные теги):

текст текст текст текст <br>
длиннноесловодлиннн оеслово<br>
<table class='codetable'>
    <tr>
        <td class='tdcodehead'>Код</td>
    </tr>
    <tr>
        <td class='tdcodebody'>
            <textarea class='codetextarea' contentEditable=false cols=60 rows=15 wrap=virtual>код код код</textarea>
        </td>
    </tr>
</table><br>

<table class='quotetable' width='95%' border='0' cellpadding='3' cellspacing='1'>
    <tr>
        <td class='tdquotehead'>Цитата</td>
    </tr>
    <tr>
        <td class='tdquote'>цитата цитата цитата</td>
    </tr>
</table><br>

<b>жирный текст</b><br>
<i>курсив</i><br>
<u>подчёркнутый</u><br>
ссылка: <a class="txttohtmllink" href="http://www.1c-bitrix.ru">http://www.1c-bitrix.ru</a><br>
email: <a class="txttohtmllink" href="mailto:support@1c-bitrix.ru">support@1c-bitrix.ru</a>

Чтобы результат отображался корректно, нужно не забыть подключить соответствующие стили (CSS). Пример простых стилей:

.quotetable, .codetable {
    width: 90%;
}
.quotetable .tdquotehead,
.quotetable .tdquote,
.codetable .tdcodehead,
.codetable .tdcodebody,
.codetextarea {
    padding: 2px;
    font-family: Arial;
    font-size: 12px;
    color: #000000;
}
.quotetable .tdquotehead,
.codetable .tdcodehead {
    font-weight: bold;
}
.quotetable .tdquote,
.codetable .tdcodebody {
    border: 1px solid black;
}
.quotetable .tdquotehead,
.quotetable .tdquote,
.codetable .tdcodehead,
.codetable .tdcodebody,
.codetextarea {
    background-color: #FFFFFF;
}
.codetextarea {
    border: 0;
    width: 100%;
    overflow: auto;
}

Совет: При работе с большими текстами не забудьте учесть проблему лишних переносов строк и необходимость экранировать определённые спецсимволы, если планируется дополнительная логика обработки.

2. Функция HTMLToTxt

Обратная задача — уметь очищать HTML-код или приводить его к простому текстовому виду. Например, вы парсите загруженный пользователем контент, получаете HTML-разметку и хотите убрать теги или оставить только их текстовое содержимое. Именно для этого предназначена функция HTMLToTxt.

Сигнатура функции:

string HTMLToTxt(
    string text,
    string host = "",
    array delete = array(),
    string maxlen = "70"
);

Назначение и параметры:

  1. text — входная строка в формате HTML.
  2. host — web-адрес сайта (по умолчанию пуст). Если задан, то функция будет подставлять этот адрес ко всем относительным ссылкам.
  3. delete — массив регулярных выражений, которые будут удалены из текста.
  4. maxlen (по умолчанию "70") — если это число, то функция будет вставлять тег <br/> каждые N символов.

Пример использования HTMLToTxt:

Предположим, мы имеем следующий HTML-контент:

$str = '
<table>
    <tr>
        <td valign=top><b><a href="/ru/products/sitemanager/editions/business.php">Бизнес</a>
        </b> - полная версия продукта для управления интернет-магазином, интеграция
        с "1С:Торговля и Склад", поддержка дилерских сетей.<br>
        <font class=smalltext><b>$1699</b> (MySQL-версия)<br><b>$24500</b>
        (Oracle-версия)</font></td>
    </tr>
</table>
<ul>
    <li>Пункт 1</li>
    <li>Пункт 2</li>
    <li>Пункт 3</li>
</ul>
';
echo HTMLToTxt($str, "http://www.bitrix.ru");

На выходе мы получим:

Бизнес [ http://www.bitrix.ru/ru/products/sitemanager/editions/business.php ]
- полная версия продукта для управления интернет-магазином, интеграция с
"1С:Торговля и Склад", поддержка дилерских сетей.
$1699 (MySQL-версия)
$24500 (Oracle-версия)

- Пункт 1
- Пункт 2
- Пункт 3

Удаление отдельных тегов или содержимого:

Иногда нужно только убрать конкретные теги, при этом оставив их содержимое. К примеру, если мы хотим удалить <a> и <img>, но сохранить текст в них, можно использовать массив шаблонов для delete:

$string = 'message <a href="http://www.google.com" target="_blank" rel="nofollow">http://www.google.com</a>';
$newString = HTMLToTxt($string, "", array("'<img[^>]*?>'si", "'<a[^>]*?>'si"));

echo $newString;
// Результат: message http://www.google.com

3. Практические кейсы применения

  1. Форматирование пользовательского контента: Многие разработчики сталкиваются с проблемой, когда пользователи оставляют тексты с некорректным форматированием, «ломающими» вёрстку. Используя TxtToHTML с параметрами по ограничению длины строки или разбивке слов, можно избежать «вылазящих» за границы блоков ссылок или длинного кода.
  2. Безопасная публикация: Если вы получаете HTML из внешних источников (форумы, формы обратной связи и т. д.), желательно очистить код от вредоносных скриптов. С помощью HTMLToTxt можно сначала привести весь текст в «сырой» вид, а затем по необходимости снова отформатировать «чистым» HTML, уже без потенциально опасных тегов.
  3. Подготовка текста к рассылкам: Некоторые email-рассылки требуют упрощённого текстового формата без HTML-тегов. HTMLToTxt поможет быстро преобразовать веб-контент в текст, удобный для писем или push-уведомлений.
  4. Превращение длинного текста в web-страницу: В случаях, когда нужно выложить документацию или инструкции, написанные «просто в текстовом файле», легко воспользоваться TxtToHTML, чтобы добавить базовые переносы строк, ссылки, выделить цитаты и код.
  5. Логирование и отладка: Когда требуется записывать HTML в логи, может быть сложно читать многоуровневые теги. Если преобразовать «шумный» HTML в обычный текст, анализ лог-файлов заметно упрощается.

4. Рекомендации по SEO и удобству использования

  • Используйте корректные заголовки и стили. Если вставляете результат TxtToHTML в контент, уделяйте внимание структуре документа. Заголовки, параграфы и списки улучшают восприятие материала и влияют на SEO.
  • Не перебарщивайте с разбивкой слов (max_string). Если слишком часто разбивать слова, текст станет нечитаемым. Ставьте оправданное значение, которое не ломает смысл.
  • Сохраняйте привлекательность ссылок. Старайтесь правильно задавать класс link_class, чтобы стилизовать ссылки согласно общему дизайну, и не забывайте про make_url = true, если хотите автоматически обрабатывать URL и email.
  • Учитывайте особенности индексирования. Если вы формируете контент динамически, важно, чтобы поисковые системы (Google, Яндекс и т. д.) видели итоговый HTML без лишних тегов и скриптов. Функции TxtToHTML и HTMLToTxt призваны упростить создание удобного для SEO контента.

Заключение

Функции TxtToHTML и HTMLToTxt — незаменимые помощники при работе с текстовыми данными в рамках CMS 1С-Битрикс. Они позволяют эффективно управлять пользовательским контентом, делая его безопасным, читабельным и стилистически оформленным. В зависимости от ваших задач, вы можете либо «облагородить» обычный текст, превратив его в HTML-код, либо убрать из HTML всю разметку и оставить только «чистый» текст.

Используйте TxtToHTML и HTMLToTxt в сочетании с другими инструментами 1С-Битрикс, следуйте рекомендациям по безопасности и SEO, и ваш контент всегда будет выглядеть актуально и профессионально.

Теги:  TxtToHTML, HTMLToTxt, обработка текста, CMS, функции, HTML, текст

Стоимость услуг по разработке и сопровождению сайтов на 1C-Битрикс

Разработка интернет-магазина с готовой версткой

от 4 недель

от 90 000 рублей

* указана минимальная стоимость. Стоимость выбранной лицензии «1С-Битрикс» оплачивается отдельно.

Интернет-магазин на готовом решении

от 7 дней

от 40 000 рублей
запуск сайта в максимально короткие сроки

* указана минимальная стоимость. Стоимость выбранной лицензии «1С-Битрикс» оплачивается отдельно.

Перенос сайтов на «1С-Битрикс»

сайты на платформе «1С-Битрикс» — это удобство, надежность и высокая посещаемость

от 12 000 рублей
Перенос сайтов с любых CMS и статичных страниц на платформу «1С-Битрикс», с учетом дизайна, верстки и урл-адресов. С сохранением всей информации и структуры сайта.

* зависит от объема выполняемых работ.