
Jevix — средство для фильтрации HTML
==========
Система автоматического типографирования и фильтрации текста с HTML/XHTML разметкой, разработанная в [ТМ™](https://tmtm.ru) для собственных проектов с открытым исходным кодом. Изначально появился как php-версия [перлового Jevix-а](http://jevix.ru), сейчас проекты сильно разошлись.

Где используется
---------
* Проекты Тематических Медиа ([Хабрахабр](https://habr.com) и др.)
* Сообщество безвоздместного дарения [Дару~дар](http://darudar.org)
* Один из ведущих русскоязычных интернет-ресурсов, посвящённых nix системам и миру Open Source [NIXP.RU](http://www.nixp.ru/)
* Свободные движки для блого-социальных сетей и тематических сообществ [LiveStreet](http://livestreet.ru/), [BigStreet](http://bigstreet.ru/) и [Explay CMS](http://explay.su)
* Система управления сайтами [Сogear](http://cogear.ru/) на [CodeIgniter](http://codeigniter.com/)
* Многофункциональная система управления сайтами [Alto CMS](https://github.com/altocms/altocms)
* [Плагин для Codeigniter](http://www.coolweb.su/blog/7.html). Работает в связке с GeSHi для подсветки синтаксиса
* Плагин для MODx CMS: [домашняя страница](http://bezumkin.ru/modx/jevix/), [на GitHub](https://github.com/bezumkin/modx-jevix)
* Компонент для удобного использования [Jevix в Yii](https://github.com/tokolist/yii-components/blob/master/protected/extensions/yiicomp/widgets/YiiJevix/readme_ru.md)

Возможности
--------
* Фильтрация введённого пользователем текста с HTML разметкой на основе заданных правил о разрешённых тегах и атрибутах
* Исправление ошибок HTML и формирование валидного HTML или XHTML кода
* Предотвращение XSS-атак
* Применение правил набора текстов (типографика) для русского языка

Преимущества
--------
* Jevix работает на '''конечном автомате''', а не на регулярных выражениях. Соответственно обратная идеология: вместо запрещающих правил разрешающие (всё что не разрешено — запрещено)
* XSS-фильтация, валидация, обработка HTML и типографирование в одном флаконе, в одном файле

Недостатки
--------
* Jevix разделяет строки '''&lt;br&gt;'''-ами. Делать '''&lt;p&gt;абзацы&lt;/p&gt;''' он не умеет, и, в существующей архитектурной концепции вряд ли научится
* Автор больше не развивает проект, перешёл на Python и постепенно забывает синтаксис PHP. Однако PULL-реквесты приветствуются

Пример использования
----
```php
<?
require('jevix.class.php');

$jevix = new MioVisman\Jevix\Jevix();     //Конфигурация
// Устанавливаем разрешённые теги. (Все не разрешенные теги считаются запрещенными.)
$jevix->cfgAllowTags(array('a', 'img', 'strong', 'ul', 'li', 'h1', 'h2'));     // Устанавливаем разрешённые параметры тегов.
$jevix->cfgAllowTagParams('a', array('title', 'href'));     // Устанавливаем параметры тегов являющиеся обязяательными. Без них вырезает тег оставляя содержимое.
$jevix->cfgSetTagParamsRequired('a', 'href');     // Устанавливаем теги которые может содержать тег контейнер
$jevix->cfgSetTagChilds('ul', 'li', true, false);     // Устанавливаем атрибуты тегов, которые будут добавлятся автоматически
$jevix->cfgSetTagParamDefault('a', 'rel', 'nofollow');     //Парсинг
$res = $jevix->parse('...тут...мог...бы...быть...ваш...текст...'); ?>
```

Системные требования
-----
* PHP 7.3.0+
* Модуль mbstring
