Класс Text

Методы для работы с текстом и html-кодом.

Text::balanceTags($text)

Балансировать теги, то есть, обеспечить парность открывающих и закрывающих тегов.

  • Возвращает строку.
  • $text — строка (html-код).

Имеется аналогичный параметр поля balance-tags: $fields[1]['balance-tags'] = true;

Text::removeAttributes($text)

Удаляет все атрибуты html-элементов.

  • Возвращает строку.
  • $text — строка (html-код).

Имеется аналогичный параметр поля remove-attributes: $fields[1]['remove-attributes'] = true;

Text::removeElements($text, $tags)

Удаляет элементы с заданными тегами (вместе с содержимым).

  • Возвращает строку.
  • $text — строка (html-код).
  • $tags — перечень тегов, в одной из двух форм: 'script|style' или [script','style'].

Пример: $text2 = Text::removeElements($text, 'script|style');

Имеется аналогичный параметр поля remove-elements: $fields[1]['remove-elements'] = $tags;

Text::stripTags($text, $options=[])

Метод удаляет из html-кода теги, превращая его в обычный текст (plain text). Удаляются также переносы, табуляции и двойные пробелы. Метод обычно применяется для подготовки html-атрибутов (title, alt), метатегов и т.п.

  • Возвращает строку без тегов.
  • $text — текст (html-код).
  • $options — массив с опциями:
    $options = [
        'strip-quotes'=>true, # Удалить кавычки.
        'nl2br'=>true, # Заменить переводы строк на тег <br />, то есть, html-перенос строки.
        'tab2nbsp'=>true, # Заменить табуляцию на четыре пробела.
        'exceptions'=>'', # Перечень имен тегов, которые не нужно убирать. 
                          # Разрешены два формата: 'a|div|span' или ['a','div','span']
    ];
    
    Короткая форма записи для булевых опций

    Для булевых опций можно применять короткую форму записи. Подробности см. в описании метода Arr::formatOptions(), который и применен внутри описываемого метода.

    • Булевы опции допустимо записывать как неассоциативный массив:
      $options = ['strip-quotes', 'nl2br'];

    • Более того, если опция только одна, допустимо записывать ее в виде строки:
      $options = 'strip-quotes';

Пример:

echo '<img src="..." alt="'.Text::stripTags($dat[1], 'strip-quotes').'" />';

Примечания:
  • В отличие от php-функции strip_tags(), метод Text::stripTags() не просто удаляет тег <br>, а заменяет его на пробел.

  • Опция 'nl2br' обычно используется при отключенном визуальном редакторе в окне редактирования. Пользователь редактирует голый текст (без форматирования), но переводы строк при выводе на страничке будут визуально сохраняться. То же самое касается и опции 'tab2nbsp'.

    Пример "безопасного" редактирования (работают только переводы строк)

    .tdd
    <?php
    $types[1] = 'text';
    $fields['no-text-editor'] = [1];
    
    .tpl
    <?php 
    echo $dat['edit'];
    echo Text::stripTags($dat[1], 'nl2br');
    
    Для пущей безопасности метод Text::stripTags() можно применить и в обработчике обновления *.tuh:
    <?php
    if ($_POST['dat']) {
        foreach ([1] as $field) # Для нескольких полей: [1,2,4] as ...
            $_POST['dat'][$field] = Text::stripTags($_POST['dat'][$field]);
    }
Имеется аналогичный параметр поля strip-tags: $fields[1]['strip-tags'] = $options;

Text::truncate($text, $length=100, $options=[])

Обрезание текста. В оставшемся тексте корректно восстанавливаются закрывающие html-теги, оставшиеся в удаленной части.

  • Возвращает обрезанный текст.
  • $text — текст (html-код).
  • $length — длина возвращаемого текста без учета тегов и ellipsis (см. ниже).
  • $options — массив с опциями. Ниже приведены опции по умолчанию:
    $options = [
        'ellipsis'=>'...', # Код, который нужно присоединить в конце обрезанного текста.
        # Пример: 'ellipsis'=>'<img src="templates/images/array.png" />', 
        
        'split-word'=>false, # Текст обрезать точно по длине, заданной параметром $length,
        # Обрезать даже если придется обрезать посередине слова
        
        'plain'=>false, # Является ли $text простым текстом, а не гипертекстом.
        # Данная опция ускорит обрезание, так как не производится проверка на наличие html-тегом.
    ];

    Для булевых опций можно применять короткую форму записи. Подробности см. в описании метода Arr::formatOptions(), который и применен внутри описываемого метода.

Примеры

echo Text::truncate($text, 200, $options);

Если нужно убрать теги и обрезать текст:
echo Text::truncate(Text::stripTags($text, 'strip-quotes'), $length, 'plain');