PHPackages                             avadim/qevix - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Validation &amp; Sanitization](/categories/validation)
4. /
5. avadim/qevix

ActiveLibrary[Validation &amp; Sanitization](/categories/validation)

avadim/qevix
============

Automatic filter HTML/XHTML

v1.1.3(5y ago)038MITPHPPHP &gt;=5.6

Since Mar 23Pushed 5y agoCompare

[ Source](https://github.com/aVadim483/qevix)[ Packagist](https://packagist.org/packages/avadim/qevix)[ Docs](https://github.com/aVadim483/qevix)[ RSS](/packages/avadim-qevix/feed)WikiDiscussions master Synced 2d ago

READMEChangelog (3)Dependencies (1)Versions (12)Used By (0)

Qevix [![GitHub tag (latest by date)](https://camo.githubusercontent.com/feefadb14929d91cd3f685751273a07503c91a12d96f46bcd404bf5da50ebf4d/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f7461672f61566164696d3438332f7165766978)](https://camo.githubusercontent.com/feefadb14929d91cd3f685751273a07503c91a12d96f46bcd404bf5da50ebf4d/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f7461672f61566164696d3438332f7165766978)[![Build Status](https://camo.githubusercontent.com/283346b742924ea3027163c97a243c7add33c3ae7d72f3deaf5e470681ba8641/68747470733a2f2f7472617669732d63692e6f72672f61566164696d3438332f71657669782e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/aVadim483/qevix)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

[](#qevix-)

**Qevix** — Система типографирования и фильтрации текста с HTML/XHTML разметкой . При обработке HTML-текстов, применяя наборы правил, контролирует перечень допустимых тегов и атрибутов, предотвращает возможные XSS-атаки.

Qevix основывается на идеях и исходном коде [PHP версии Jevix](https://github.com/ur001/Jevix/). Фильтр полностью переписан, устраняет ряд ошибок и недоработок, а также вводит новые возможности в правила фильтрации.

### Возможности

[](#возможности)

- Фильтрация текста с HTML/XHTML разметкой на основе заданных правил о разрешённых тегах и атрибутах;
- Исправление ошибок HTML/XHTML;
- Типографирование текстов без обработки HTML/XHTML
- Обработка строк предваренных специальными символами (#tagname, @username, $keyword);
- Установка на теги callback-функций для изменения или сбора информации;
- Предотвращение XSS-атак;

### Требования

[](#требования)

- PHP &gt;= 5.6
- php-mbstring
- UTF-8

### Подключение с помощью Composer

[](#подключение-с-помощью-composer)

|$ composer require avadim/qevix

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

[](#пример-использования)

```
// Создаем экземпляр
$qevix = new avadim\Qevix();

//  читаем файл конфигурации
$config = include 'path/to/file/config.php';

$qevix->setConfig($config);

// альтернативный вариант
$config = include 'path/to/file/config.php';
$qevix = new avadim\Qevix($config);

// еще более короткий вариант
$qevix = new avadim\Qevix('path/to/file/config.php');
```

```
$qevix = new avadim\Qevix();

// Конфигурация - задаем параметры по отдельности

// 1. Задает список разрешенных тегов
$qevix->cfgSetTagsAllowed(['b', 'i', 'u', 'a', 'img', 'ul', 'li', 'ol', 'br', 'code', 'pre', 'div', 'cut']);

// 2. Указывает, какие теги считать короткими (, )
$qevix->cfgSetTagShort(['br','img','cut']);

// 3. Указывает преформатированные теги, в которых нужно всё заменять на HTML сущности
$qevix->cfgSetTagPreformatted(['code']);

// 4. Указывает не короткие теги, которые могут быть пустыми и их не нужно из-за этого удалять
$qevix->cfgSetTagIsEmpty(['div']);

// 5. Указывает теги, внутри которых не нужна авто-расстановка тегов перевода на новую строку
$qevix->cfgSetTagNoAutoBr(['ul', 'ol']);

// 6. Указывает теги, которые необходимо вырезать вместе с содержимым
$qevix->cfgSetTagCutWithContent(['script', 'object', 'iframe', 'style']);

// 7. Указывает теги, после которых не нужно добавлять дополнительный перевод строки. Например, блочные теги
$qevix->cfgSetTagBlockType(['ol','ul','code']);

// 8. Добавляет разрешенные параметры для тегов. Значение по умолчанию - шаблон #text. Разрешенные шаблоны #text, #int, #link, #regexp(...) (Например: "#regexp(\d+(%|px))")
$qevix->cfgSetTagAttrAllowed('a', ['title', 'href' => '#link', 'rel' => '#text', 'target' => ['_blank'], 'download' => '#bool']);
$qevix->cfgSetTagAttrAllowed('img', ['src' => '#text', 'alt' => '#text', 'title', 'align' => ['right', 'left', 'center'], 'width' => '#int', 'height' => '#int']);

// 9. Добавляет обязательные параметры для тега
$qevix->cfgSetTagAttrRequired('img', 'src');
$qevix->cfgSetTagAttrRequired('a', 'href');

// 10. Указывает, какие теги являются контейнерами для других тегов
$qevix->cfgSetTagChildren('ul', 'li', true, true);
$qevix->cfgSetTagChildren('ol', 'li', true, true);

// 11. Указывает, какие теги не должны быть дочерними к другим тегам
$qevix->cfgSetTagGlobal('cut');

// 12. Устанавливаем атрибуты тегов, которые будут добавляться автоматически
$qevix->cfgSetTagAttrDefault('a', 'rel', 'nofollow', true);
$qevix->cfgSetTagAttrDefault('img', 'alt', '');

// 13. Указывает теги, в которых нужно отключить типографирование текста
$qevix->cfgSetTagNoTypography(['code', 'pre']);

// 14. Устанавливает список разрешенных протоколов для ссылок (https, http, ftp)
$qevix->cfgSetLinkProtocolAllow(['http','https']);

// 15. Включает или выключает режим XHTML
$qevix->cfgSetXHTMLMode(false);

// 16. Включает или выключает режим автозамены символов переводов строк на тег br
$qevix->cfgSetAutoBrMode(true);

// 17. Включает или выключает режим автоматического определения ссылок
$qevix->cfgSetAutoLinkMode(true);

// 18. Задает символ/символы перевода строки. По умолчанию "\n". Разрешено "\n", "\r\n" или null (задает автоматически для текущей ОС)
$qevix->cfgSetEOL("\n");

// 19. Устанавливает на тег callback-функцию
$qevix->cfgSetTagBuildCallback('code', 'tag_code_build');

// 20. Устанавливает на строку предворенную спецсимволом (@|#|$) callback-функцию
$qevix->cfgSetSpecialCharCallback('#', 'tag_sharp_build');
$qevix->cfgSetSpecialCharCallback('@', 'tag_at_build');

// 21. Устанавливает на тег callback-функцию, которая сохраняет URL изображений для meta-описания
$qevix->cfgSetTagEventCallback('img', 'tag_img_event');

//-----

function tag_code_build($tag, $params, $content)
{
	return ''.$content.''."\n";
}

//-----

$meta_img_src = array();

function tag_img_event($tag, $params, $content)
{
	global $meta_img_src;

	$meta_img_src[] = $params['src'];
}

//-----

function tag_sharp_build($string)
{
	if(!preg_match('#^[\w\_\-\ ]{1,32}$#isu', $string)) {
		return false;
	}

	return '#'.$string.'';
}

//-----

function tag_at_build($string)
{
	if(!preg_match('#^[\w\_\-\ ]{1,32}$#isu', $string)) {
		return false;
	}

	return '@'.$string.'';
}

//-----

//Фильтр

$text =
