Add Jevix

Library for html filtering
This commit is contained in:
Visman 2021-03-03 22:03:19 +07:00
parent f962fcc807
commit ca14633792
12 changed files with 2995 additions and 2 deletions

View file

@ -34,6 +34,7 @@
"miovisman/parserus": "^1.1.0",
"miovisman/normemail": "dev-master",
"psr/simple-cache": "^1.0.1",
"psr/log": "^1.1.3"
"psr/log": "^1.1.3",
"miovisman/jevix": "^2.2.0"
}
}

60
composer.lock generated
View file

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "23fbddba7eeaeb83366d5468a344e816",
"content-hash": "4adcde13cbe258b0c3a57a127576d8fe",
"packages": [
{
"name": "artoodetoo/dirk",
@ -60,6 +60,64 @@
},
"time": "2020-10-16T13:32:17+00:00"
},
{
"name": "miovisman/jevix",
"version": "2.2.0",
"source": {
"type": "git",
"url": "https://github.com/MioVisman/Jevix.git",
"reference": "f92970c3fa19dbecd73652aca378aaf0703443bf"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/MioVisman/Jevix/zipball/f92970c3fa19dbecd73652aca378aaf0703443bf",
"reference": "f92970c3fa19dbecd73652aca378aaf0703443bf",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
"php": ">=7.3.0"
},
"type": "library",
"autoload": {
"psr-4": {
"MioVisman\\Jevix\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "ur001"
},
{
"name": "livestreet framework"
},
{
"name": "Bezumkin"
},
{
"name": "Roman Shamritskiy",
"email": "roman@litgroup.ru"
},
{
"name": "Evgeniy Borisov",
"email": "agel-nash@mail.ru"
},
{
"name": "Visman",
"email": "mio.visman@yandex.ru",
"homepage": "https://github.com/MioVisman"
}
],
"description": "Library for html filtering",
"support": {
"source": "https://github.com/MioVisman/Jevix/tree/2.2.0"
},
"time": "2021-03-03T11:11:48+00:00"
},
{
"name": "miovisman/normemail",
"version": "dev-master",

View file

@ -53,6 +53,15 @@ private static $installed = array (
),
'reference' => NULL,
),
'miovisman/jevix' =>
array (
'pretty_version' => '2.2.0',
'version' => '2.2.0.0',
'aliases' =>
array (
),
'reference' => 'f92970c3fa19dbecd73652aca378aaf0703443bf',
),
'miovisman/normemail' =>
array (
'pretty_version' => 'dev-master',

View file

@ -10,5 +10,6 @@ return array(
'Psr\\SimpleCache\\' => array($vendorDir . '/psr/simple-cache/src'),
'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
'MioVisman\\NormEmail\\' => array($vendorDir . '/miovisman/normemail/src'),
'MioVisman\\Jevix\\' => array($vendorDir . '/miovisman/jevix/src'),
'ForkBB\\' => array($baseDir . '/app'),
);

View file

@ -19,6 +19,7 @@ class ComposerStaticInit90ad93c7251d4f60daa9e545879c49e7
'M' =>
array (
'MioVisman\\NormEmail\\' => 20,
'MioVisman\\Jevix\\' => 16,
),
'F' =>
array (
@ -43,6 +44,10 @@ class ComposerStaticInit90ad93c7251d4f60daa9e545879c49e7
array (
0 => __DIR__ . '/..' . '/miovisman/normemail/src',
),
'MioVisman\\Jevix\\' =>
array (
0 => __DIR__ . '/..' . '/miovisman/jevix/src',
),
'ForkBB\\' =>
array (
0 => __DIR__ . '/../..' . '/app',

View file

@ -56,6 +56,67 @@
},
"install-path": "../artoodetoo/dirk"
},
{
"name": "miovisman/jevix",
"version": "2.2.0",
"version_normalized": "2.2.0.0",
"source": {
"type": "git",
"url": "https://github.com/MioVisman/Jevix.git",
"reference": "f92970c3fa19dbecd73652aca378aaf0703443bf"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/MioVisman/Jevix/zipball/f92970c3fa19dbecd73652aca378aaf0703443bf",
"reference": "f92970c3fa19dbecd73652aca378aaf0703443bf",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
"php": ">=7.3.0"
},
"time": "2021-03-03T11:11:48+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
"psr-4": {
"MioVisman\\Jevix\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "ur001"
},
{
"name": "livestreet framework"
},
{
"name": "Bezumkin"
},
{
"name": "Roman Shamritskiy",
"email": "roman@litgroup.ru"
},
{
"name": "Evgeniy Borisov",
"email": "agel-nash@mail.ru"
},
{
"name": "Visman",
"email": "mio.visman@yandex.ru",
"homepage": "https://github.com/MioVisman"
}
],
"description": "Library for html filtering",
"support": {
"source": "https://github.com/MioVisman/Jevix/tree/2.2.0"
},
"install-path": "../miovisman/jevix"
},
{
"name": "miovisman/normemail",
"version": "dev-master",

View file

@ -30,6 +30,15 @@
),
'reference' => NULL,
),
'miovisman/jevix' =>
array (
'pretty_version' => '2.2.0',
'version' => '2.2.0.0',
'aliases' =>
array (
),
'reference' => 'f92970c3fa19dbecd73652aca378aaf0703443bf',
),
'miovisman/normemail' =>
array (
'pretty_version' => 'dev-master',

21
vendor/miovisman/jevix/LICENSE vendored Normal file
View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2018 ur001
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

22
vendor/miovisman/jevix/composer.json vendored Normal file
View file

@ -0,0 +1,22 @@
{
"name": "miovisman/jevix",
"license": "MIT",
"description": "Library for html filtering",
"authors": [
{"name": "ur001"},
{"name": "livestreet framework"},
{"name": "Bezumkin"},
{"name": "Roman Shamritskiy", "email": "roman@litgroup.ru"},
{"name": "Evgeniy Borisov", "email": "agel-nash@mail.ru"},
{"name": "Visman", "email": "mio.visman@yandex.ru", "homepage": "https://github.com/MioVisman"}
],
"autoload": {
"psr-4": {
"MioVisman\\Jevix\\": "src/"
}
},
"require": {
"php": ">=7.3.0",
"ext-mbstring": "*"
}
}

127
vendor/miovisman/jevix/history.md vendored Normal file
View file

@ -0,0 +1,127 @@
2.2.0
-------
+ Simplify conditions
+ Add cfgSetNL() method
+ Move the check for the existence of tag into separate method
+ Add syntactic sugar for configuration methods
+ HTML5 by default
+ Change the text of exceptions and errors (to English), add new errors
2.1.0
-------
+ declare(strict_types=1)
+ Change logic for checking allowed protocols for image and link
+ Change logic for checking for image and link
+ Fix/change regexps
2.0.0
-------
+ Require PHP 7.3.0+
+ Delete function.php
+ Code style
+ Change the structure of the error array
+ Delete cfgSetTagParamsAutoAdd() method
+ Change the algorithm for converting special characters inside tag attributes
1.2.1
-------
+ PhpDoc
+ Фильтрация ссылок на домене (PR #2)
1.2.0
-------
+ Форматирование кода
+ Слияние всех форков
1.1.3
-------
+ Добавлено задание значений атрибутов с помощью регулярных выражений (в квадратных скобках)
1.1.2
-------
+ Добавлено задание разрешеных протоколов для разных параметров
1.1.1
-------
+ Исправлены ошибки из-за которых удалялись теги и аттрибуты со значением "0". Спасибо Dmitry Shurupov (dmitry.shurupov@trueoffice.ru)
1.1.0
-------
+ cfgSetTagParamsAutoAdd() deprecated. Вместо него следует использовать cfgSetTagParamDefault() с более удобным синтаксисом
+ Исправлен критический баг с обработкой атрибутов тегов https://code.google.com/p/jevix/issues/detail?id=1
+ Удаление атрибутов тегов с пустым значением. Атрибуты без значений (checked, nowrap) теперь превращаются в checked="checked"
+ Исправлен тест, проведена небольшая ревизия кода
1.0.2
-------
+ Функции для работы со строками заменены на аналогичные mb_*, чтобы не перегружать через mbstring.func_overload (ev.y0ga@mail.ru)
1.0.1
-------
+ cfgSetAutoReplace теперь регистронезависимый
+ Возможность указать через cfgSetTagIsEmpty теги с пустым содержанием, которые не будут адалены парсером (rus.engine)
+ фикс бага удаления контента тега при разном регистре открывающего и закрывающего тегов (rus.engine)
+ Исправлено поведение парсера при установке правила sfgParamsAutoAdd(). Теперь параметр устанавливается только в том случае, если его вообще нет в обрабатываемом тексте. Если есть - оставляется оригинальное значение. (deadyaga)
1.0.0
-------
+ Исправлен баг с закрывающимися тегами приводящий к созданию непарного тега рушащего вёрстку
1.00 RC2
-------
+ Небольшая чистка кода
1.0.0 RC1
-------
+ Добавлен символьный класс Jevix::RUS для определния русских символов
+ Авторасстановка пробелов после пунктуации только для кирилицы
+ Добавлена настройка cfgSetTagNoTypography() отключающая типографирование в указанном теге
+ Немного переделан алгоритм обработки кавычек. Он стал более строгим
+ Знак дюйма 33" больше не превращается в открывающуюся кавычку. Однако варриант "мой 24" монитор" - парсер не переварит.
0.9.9
-------
Расширена функциональность для проверки атрибутов тега: можно указать тип атрибута ```( 'colspan'=>'#int', 'value' => '#text' )``` в Jevix, по-умолчанию, определён массив типов для нескольких стандартных атрибутов (src, href, width, height)
0.9.8
-------
+ Расширена функциональность для проверки атрибутов тега: можно задавать список дозможных значений атрибута ```( 'align'=>array('left', 'right', 'center') )```
0.9.7
-------
+ Обычные "кавычки" сохраняются как &quote; если они были так написаны
0.9.6
-------
+ Добавлены разрешённые протоколы https и ftp для ссылок ```(a href="https://...)```
0.9.5
-------
+ Исправлено типографирование ?.. и !.. (две точки в конце больше не превращаются в троеточие)
+ Отключено автоматическое добавление пробела после точки для латиницы из-за чего невозможно было написать index.php или .htaccess
0.94
-------
+ Добавлена настройка автодобавления параметров тегов. Непример rel = "nofolow" для ссылок. Спасибо Myroslav Holyak (vbhjckfd@gmail.com)
0.9.3
-------
+ Исправлен баг с удалением пробелов (например в ```"123 — 123"```)
+ Исправлена ошибка из-за которой иногда не срабатывало автоматическое преобразования URL в ссылу
+ Добавлена настройка cfgSetAutoLinkMode для отключения автоматического преобразования URL в ссылки
+ Автодобавление пробела после точки, если после неё идёт русский символ
0.92
-------
+ Добавлена настройка cfgSetAutoBrMode. При установке в false, переносы строк не будут автоматически заменяться на BR
+ Изменена обработка HTML-сущностей. Теперь все сущности имеющие эквивалент в Unicode (за исключением <>) автоматически преобразуются в символ
0.9.1
-------
+ Добавлена обработка преформатированных тегов ```<pre>```, ```<code>```. Для задания используйте ```cfgSetTagPreformatted()```
+ Добавлена настройка cfgSetXHTMLMode. При отключении пустые теги будут оформляться как ```<br>```, при включенном - ```<br/>```
+ Несколько незначительных багфиксов
0.9.0
-------
+ Первый бета-релиз

54
vendor/miovisman/jevix/readme.md vendored Normal file
View file

@ -0,0 +1,54 @@
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

2625
vendor/miovisman/jevix/src/Jevix.php vendored Normal file

File diff suppressed because it is too large Load diff