Add Jevix
Library for html filtering
This commit is contained in:
parent
f962fcc807
commit
ca14633792
12 changed files with 2995 additions and 2 deletions
|
@ -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
60
composer.lock
generated
|
@ -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",
|
||||
|
|
9
vendor/composer/InstalledVersions.php
vendored
9
vendor/composer/InstalledVersions.php
vendored
|
@ -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',
|
||||
|
|
1
vendor/composer/autoload_psr4.php
vendored
1
vendor/composer/autoload_psr4.php
vendored
|
@ -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'),
|
||||
);
|
||||
|
|
5
vendor/composer/autoload_static.php
vendored
5
vendor/composer/autoload_static.php
vendored
|
@ -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',
|
||||
|
|
61
vendor/composer/installed.json
vendored
61
vendor/composer/installed.json
vendored
|
@ -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",
|
||||
|
|
9
vendor/composer/installed.php
vendored
9
vendor/composer/installed.php
vendored
|
@ -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
21
vendor/miovisman/jevix/LICENSE
vendored
Normal 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
22
vendor/miovisman/jevix/composer.json
vendored
Normal 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
127
vendor/miovisman/jevix/history.md
vendored
Normal 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
|
||||
-------
|
||||
+ Обычные "кавычки" сохраняются как "e; если они были так написаны
|
||||
|
||||
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
54
vendor/miovisman/jevix/readme.md
vendored
Normal 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 разделяет строки '''<br>'''-ами. Делать '''<p>абзацы</p>''' он не умеет, и, в существующей архитектурной концепции вряд ли научится
|
||||
* Автор больше не развивает проект, перешёл на 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
2625
vendor/miovisman/jevix/src/Jevix.php
vendored
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue