Модуль Text.Process

Модуль Text.Process создан для обработки текста перед сохранением в базе данных или перед выводом на экран - транслит, подсветка синтаксиса, выделение каких-либо терминов и тд. В библиотеке есть несколько реализованных обработчиков текста. Также, можно создать любой свой обработчик.

Как применять

Для этого необходимо вызвать обработчик.

Text_Process::process($text, 'html'); // удалит почти все html-теги
Text_Process::process($text, 'translit'); // транслитерирует текст
Text_Process::process($text, 'html', 'translit'); // сначала удалит почти все html-теги, а затем транслитерирует что осталось

Следует помнить, что соблюдение правил обеспечивается необратимыми изменениями в html-коде. И если требуется сохранить html-код в первозданном виде, обрабатывать текст перед сохранением в БД не стоит. В то же время обработка текста непосредственно перед выводом на экран несколько замедлит загрузку страницы.

Настройка обработчика

В некоторых случаях необходимо настроить обработчик. Например, для фильтра HTML задать разрешенные теги, которые не нужно удалять. В этом случае вызываем обработку с настройками:

Text_Process::process($text, array('html' => array('tags' => array('b', 'i', 's')))); // удалит все теги кроме <b>, <i>, <s>

Реализованные обработчики

  • Text.Parser.Translit (translit) - производит транслитерацию текста.
  • Text.Parser.BB (bb) - переводит bb-код в html.
  • Text.Parser.Parms (parms) - переводит текстовые параметры в массив.
  • Text.Highlight.PHP (php) - подсветка синтаксиса PHP.
  • Text.Parser.Wiki (wiki) - переводит wiki-код в html.
  • Text.Filter.PlainText (plaintext) - преобразует специальные символы в HTML-сущности.
  • Text.Filter.HTML (html) - удаляет все теги, кроме разрешенных, из текста.
  • Text.Filter.HTMLPurifier (htmlpurifier) - пытается исправить ошибки html-верстки, удаляет пустые теги.
  • Text.Processor.Typographer (typographer) - улучшает отображение текста на сайте путем исправления "типографических ошибок" и правильным расположением текста.
  • Text.Processor.Nl2br (nl2br) - вставляет HTML код разрыва строки (br) перед каждым переводом строки.

Реализация своего обработчика

Для примера создадим простейший обработчик текста, который выделяет жирным шрифтом слово или часть слова, переданные через $config. Например, для подсветки запроса в результатах поиска по сайту.

Для создания своего обработчика нужно:

1. Реализовать класс, который поддерживает интерфейс Text_Process_ProcessInterface. Он содержит всего два публичных метода: process() и configure(), предназначение каждого понятно по его названию. Наш класс в упрощенном варианте будет выглядеть примерно так:

Core::load('Text.Process');

class App_TextProcessorBolder implements Core_ModuleInterface, Text_Process_ProcessInterface
{
    protected $words = array();

    // конфигурирование
    public function configure($config)
    {
        if (isset($config['words'])) {
            $this->words = is_array($config['words']) ? $config['words'] : array($config['words']);
        }
    }

    // непосредственная обработка текста
    public function process($text)
    {
        if($this->words) {
            $text = preg_replace('/('.implode('|', $this->words).')/ui', '<b>$1</b>', $text);
        return $text;
    }
}

2. Зарегистрировать свой обработчик.

Text_Process::add_process('bolder', 'App.TextProcessorBolder');

где первый аргумент - мнемокод обработчика, по которому он будет вызываться в дальнейшем.

3. Подключить модуль

Core::load('App.TextProcessorBolder');

4. Вызов осуществляется следующим образом:

$config = array('words' => 'масл');
echo Text_Process::process('Масленное масло', array('bolder' => $config)); // Результат: <b>Масл</b>енное <b>масл</b>о

Для филдов textarea и contest в настройках можно указать мнемокод своего обработчика в параметре value_processors.

public function fields()
{
    return array(
        ...
        'announce' => array(
	'type' => 'textarea',
	'value_processors' => 'bolder',
         ...
    ),
}

Text.Processor.Typographer

Данный обработчик изменяет html-код таким образом, чтобы он отображался в браузерах по всем законам web-типографики. Перечислю основные поддерживаемые правила:

  • Замена кавычек на html-коды «ёлочек»;
  • Замена минусов на html-коды тире и короткого тире;
  • Переносы предлогов, местоимений на новую строку (отсутствие "висячих" предлогов и местоимений);
  • Неразрываемые даты, ФИО и тд.

Также можно добавить висячую пунктуацию (с определенными ограничениями).

Используем так:

Text_Process::process($text, 'typographer');
Метки: Text
07.02.2017
Все статьи