Qevix — Jevix-подобный автоматический фильтр HTML/XHTML разметки в текстах.
Применяя наборы правил, контролирует перечень допустимых тегов и атрибутов, предотвращает возможные XSS-атаки.
Qevix основывается на идеях PHP версии Jevix (средства для фильтрации HTML/XHTML разметки и автоматического типографирования текста).
Jevix используют сотни сайтов и мне очень жаль, что автор прекратил развитие проекта, который в настоящий момент содержит некоторое количество недоработок.
Если вы когда-либо использовали Jevix, наверняка могли заменить такие проблемы:
- Нельзя напечатать тег
BR
при автоматической расстановке, даже если заключить его вCODE
; - Два раза экранируются спец. символы в атрибутах тегов;
- Жадная подсветка ссылок, забирает в себя знаки пунктуации после ссылки, из-за чего ссылки получаются битыми;
- Из предыдущего пункта, невозможность заключать ссылки в скобки;
- В официальной версии нет возможности пропустить перевод строки после блочных тегов;
- В официальной версии абсолютно бесполезный callback для тегов, который позволял манипулировать только с содержимым тега;
- Не совсем верное определение символов новой строки при их пропуске. Под символом новой строки понимаются и
n
иr
. В связи с чем, если на входе путаница с переводами строк, то и на выходе корректной расстановки теговBR
не получается .
Год назад у меня появилось немного времени, и я рискнул потягаться с Jevix, из которого и вырос Qevix. Я постарался сохранить стилистику конфигурации, как и в оригинале, но с добавлением некоторых новых возможностей.
Что нового:
- Можно напечатать тег
BR
вCODE
. Что довольно важно, если у вас есть возможность размещения пользователями HTML кода; - Ссылки можно заключать в скобки, они могут быть завершены знаком пунктуации, а так же быть с довольно сложными параметрами.
- Нормализация символов перевода строки на входе и возможность установить то, что хотим получить на выходе.
- Новая настройка cfgSetTagBlockType указывает, после каких тегов стоит пропустить один перевод строки, например, это могут быть блочные теги;
- Новая настройка cfgSetTagGlobal указывает, какие теги не должны быть дочерними к другим тегам. Например, для тега
CUT
это может быть очень полезно; - Новая настройка cfgSetTagBuildCallback устанавливает на тег callback-функцию для ручной сборки тега. Функция получает 3 параметра: название тега, массив с атрибутами тега и содержимое тега. Например, можно разрешить пользователям использовать только тег
CODE
, а на выходе собиратьPRE CODE
; - Новая настройка cfgSetTagEventCallback устанавливает на тег callback-функцию для сбора информации. В отличие от callback-функций, установленных с помощью cfgSetTagBuildCallback, этот обработчик не вносит изменения в текст, а может быть использован для сбора какой-либо информации об используемых тегах. Например, можно посчитать, какое количество изображений в тексте, есть ли они вообще, и сформировать массив из их URL для последующего использования, скажем, в meta-описании станицы;
- Новая настройка cfgSetSpecialCharCallback устанавливает на строку, предваренную спец. символом callback-функцию. По умолчанию Qevix работает с тремя спец. символами
#, @, $
. Как можно догадаться, эта настройка позволяет получить хештег (#hashtag
) или имя пользователя (@username
), или ключевое слово ($keyword
) и оформить его в виде ссылки или того, что вам нужно. Подробнее об этом в документации. - В Qevix сохранена только часть типографии Jevix. В Qevix нет понятия русский или латинский алфавит, есть служебные и просто печатные символы. Поэтому нельзя сказать, что этот продукт только для русскоязычных текстов. Qevix следит только за дефисами, кавычками, HTML мнемониками, может подсвечивать ссылки и устанавливать переводы строки.
Благодарю за внимание, возможно, я потратил время не зря и кому-то Qevix послужит хорошую службу. Пример работы и конфигурации вы можете посмотреть в README на GitHub.
GitHub: github.com/AlexanderGrom/Qevix
Документация: github.com/AlexanderGrom/Qevix/blob/master/DOCUMENTATION.md
Лицензия MIT.