Qevix — Jevix-подобный автоматический фильтр HTML-XHTML разметки в текстах

в 15:14, , рубрики: Песочница, метки: , ,

Qevix — Jevix-подобный автоматический фильтр HTML-XHTML разметки в текстах - 1 Qevix — Jevix-подобный автоматический фильтр HTML/XHTML разметки в текстах.

Применяя наборы правил, контролирует перечень допустимых тегов и атрибутов, предотвращает возможные XSS-атаки.

Qevix основывается на идеях PHP версии Jevix (средства для фильтрации HTML/XHTML разметки и автоматического типографирования текста).

Jevix используют сотни сайтов и мне очень жаль, что автор прекратил развитие проекта, который в настоящий момент содержит некоторое количество недоработок.

Если вы когда-либо использовали Jevix, наверняка могли заменить такие проблемы:

  1. Нельзя напечатать тег BR при автоматической расстановке, даже если заключить его в CODE;
  2. Два раза экранируются спец. символы в атрибутах тегов;
  3. Жадная подсветка ссылок, забирает в себя знаки пунктуации после ссылки, из-за чего ссылки получаются битыми;
  4. Из предыдущего пункта, невозможность заключать ссылки в скобки;
  5. В официальной версии нет возможности пропустить перевод строки после блочных тегов;
  6. В официальной версии абсолютно бесполезный callback для тегов, который позволял манипулировать только с содержимым тега;
  7. Не совсем верное определение символов новой строки при их пропуске. Под символом новой строки понимаются и n и r. В связи с чем, если на входе путаница с переводами строк, то и на выходе корректной расстановки тегов BR не получается .

Год назад у меня появилось немного времени, и я рискнул потягаться с Jevix, из которого и вырос Qevix. Я постарался сохранить стилистику конфигурации, как и в оригинале, но с добавлением некоторых новых возможностей.

Что нового:

  1. Можно напечатать тег BR в CODE. Что довольно важно, если у вас есть возможность размещения пользователями HTML кода;
  2. Ссылки можно заключать в скобки, они могут быть завершены знаком пунктуации, а так же быть с довольно сложными параметрами.
  3. Нормализация символов перевода строки на входе и возможность установить то, что хотим получить на выходе.
  4. Новая настройка cfgSetTagBlockType указывает, после каких тегов стоит пропустить один перевод строки, например, это могут быть блочные теги;
  5. Новая настройка cfgSetTagGlobal указывает, какие теги не должны быть дочерними к другим тегам. Например, для тега CUT это может быть очень полезно;
  6. Новая настройка cfgSetTagBuildCallback устанавливает на тег callback-функцию для ручной сборки тега. Функция получает 3 параметра: название тега, массив с атрибутами тега и содержимое тега. Например, можно разрешить пользователям использовать только тег CODE, а на выходе собирать PRE CODE;
  7. Новая настройка cfgSetTagEventCallback устанавливает на тег callback-функцию для сбора информации. В отличие от callback-функций, установленных с помощью cfgSetTagBuildCallback, этот обработчик не вносит изменения в текст, а может быть использован для сбора какой-либо информации об используемых тегах. Например, можно посчитать, какое количество изображений в тексте, есть ли они вообще, и сформировать массив из их URL для последующего использования, скажем, в meta-описании станицы;
  8. Новая настройка cfgSetSpecialCharCallback устанавливает на строку, предваренную спец. символом callback-функцию. По умолчанию Qevix работает с тремя спец. символами #, @, $. Как можно догадаться, эта настройка позволяет получить хештег (#hashtag) или имя пользователя (@username), или ключевое слово ($keyword) и оформить его в виде ссылки или того, что вам нужно. Подробнее об этом в документации.
  9. В Qevix сохранена только часть типографии Jevix. В Qevix нет понятия русский или латинский алфавит, есть служебные и просто печатные символы. Поэтому нельзя сказать, что этот продукт только для русскоязычных текстов. Qevix следит только за дефисами, кавычками, HTML мнемониками, может подсвечивать ссылки и устанавливать переводы строки.

Благодарю за внимание, возможно, я потратил время не зря и кому-то Qevix послужит хорошую службу. Пример работы и конфигурации вы можете посмотреть в README на GitHub.

GitHub: github.com/AlexanderGrom/Qevix
Документация: github.com/AlexanderGrom/Qevix/blob/master/DOCUMENTATION.md

Лицензия MIT.

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js