Как стать автором
Обновить

Комментарии 35

Помогает кактус-то?
Только в сочетании с пальмами за окном)
Поясните, пожалуйста, чем оно кактус. Мужики-то не знают.
Суккуленты навсегда останутся в памяти благодарных потомков как «Кактус у компа, жрущий всякую вредную бяку излучений».
Вот оно что, оказывается. А я подумал, что вы про источник пищи и острых ощущений для грызунов.
Еще как! Главное правильно его готовить.

А если он встроен в движок (как например в Cotonti, который я использую ), то ему цены нет. Тем более, что тут задаются различные профили для админов, авторов и тех кто пишет комментарии на сайт. У всех разные ограничения и соответственно уровень «зачистки» текстов различный. Очень удобно.
Это щас такая совсем беспалевная реклама очередной супер-CMS была?
С какой целью интересуетесь?

Я стараюсь делиться информацией о полезных / удобных программах и инструментах, каковым в данном случае считаю Cotonti.
Если форма подачи способствовала раздражению вашей аллергии на рекламу — извините, не хотел причинить страдания.
Ну просто явный коммент немного не в тему, имхо, с целью вставить ссылку на свой проект.
Вы не ответили на вопрос. :)
Я не просто так спросил. Т.к. на мой взгляд ваш вопрос был «Ну просто явный коммент на потроллить».

ps: О применимости HTML Purifiera в рамках какой-либо CMS писал ниже.
<p class="header error">Безличное - вочеловечить,</p>

<p class="header">Безличное - вочеловечить,</p>

Куда делся второй css-класс?
Мы в конфиге специально определили, что разрешен только класс header
$config->set('Attr.AllowedClasses',array('header')); // или Attr.ForbiddenClasses имеются ввиду CSS классы
Зачем?
Как зачем? Чтобы не было возможности в статье убить всю вёрстку сайта поставив те классы тегам, которые активно используются в вёрстке этого самого сайта. К примеру если у вас в статье у некоторых элементов будут 9px border-ы, часть элементов будет летать, потому что position: fixed, ну и т.д.

Можно просто определить список классов, которые можно использовать внутри. Зачем? Ну тут долго расписывать, бывает нужно. Правда чаще, нужно разработчику, чтобы из-за 1-ой 2-ух оригинальных идей в оформлении не городить огромные конструкции из кода, шаблонов и пр.
Как по мне намного лучше использовать валидатор какой-то и править руками. Особенно удручает:

очищает любой html код от всех вредоносных, невалидных, запрещенных (вашей конфигурацией) частей кода, в том числе отдельные атрибуты


Зачем вообще в коде невалидные части?

А вот если переделать это в валидатор польза будет, например нашло ошибку и сразу бы бросало Exception. Вот тогда тим лид бы смог выставить правила верстки и заставить джунов верстать по этим правилом (е.г. если ошибка в темплейте то сайт вообще не отобразится)
Сидит себе content-manager Галя, копипастит разного рода тексты с других сайтов, с Word-а и ещё каких-нибудь источников. И тут система не даёт ей сохранить статью на сайте, мотивируя это тем, что:

1. Галя, вы используете неподходящие к системе классы в тегах
2. Галя, вы используете неподходящие теги
3. Галя, вы используете неподходящие аттрибуты в тегах
4. Галя, вы…
А ну быстро всё исправили1111

Галя повела бровями и послала систему к чёрту, т.е. набрала телефон разработчика.
Как то так я вижу ваш валидатор. Вы такой вариант предлагаете? :)
Я писал джун девелопер а не Галя контент менеджер. Это немного не то.
Если Галя будет копипастить с Ворда, а потом дать еще какому-то куску коду это порезать как оно будет выглядеть на фронтенде? Кто потом это править будет? Научите Галю какому-там маркдауну например.

Вы правда не понимаете? Это штука для фильтрации пользовательского ввода, когда пользователи заведомо злые и им надо резрешить некоторые тэги. Форумы, чаты, комментарии в блогах. При чем тут тимлиды и джуниоры.
Я, честно говоря, не понял причём тут «джун девелопер», поэтому опустил этот момент. Речь ведь идёт о библиотеке, назначением которой является — приведение любого стороннего HTML-кода в нормальный (согласно конфигу) и безопасный вид. Т.е. в 99% случаев речь идёт о тех моментах на сайте, которые выглядят как куча текста с картинками, видео, таблицами и кнопкой «изменить» под ними. Кнопка, в свою очередь, позволяет всю эту кашу дополнить\изменить\удалить. Т.е. мы на фронтенде изначально.

Научите Шалю какому-там маркдауну

Боюсь такое возможно только в далёкой-далёкой галактике. Либо у Гали будет гонорары как у вашего «джун девелопера», а то и выше. При этом Галя всё равно будет вас прокликать всеми правдами и не правдами. Т.к. накликать мышкой в CKEditor-е статью в 10 раз быстрее, чем написать её в «каком-то там маркдауне». А большего и не нужно.
Гале надо сделать за день двадцать-тридцать текстов, и её от вашего мардауна будет тошнить уже к обеду. Поэтому для неё мы делаем визуальный редактор, а дальше текст в порядок приводит сервер.
Ааа ну извиняюсь тогда =) Я что-то про такой кейс и думать забыл, давно не делал говно копи-паста сайты)
А причём тут говно-копипаста сайты? Хабр тоже говнокопипаст сайт? :) Любой сайт, наполнение которого предполагает заполнение сайта текстами должен сопровождаться использованием подобных библиотек\инструментов. Либо это не сайт, а одна сплошная дыра.
Епам такой епам :)
Да. Особое зло — это копипаста из Word, с его «включенными» стилями по полстраницы на абзац. Вычищать такое руками, или даже полуавтоматически — ад.

Решал подобную задачу недавно На сайте было около сотни отдельных страниц, каждая на несколько экранов. Про встроенные стили не говорю — как раз приведенный случай. В результате решил за счет HTMLPurifier'а очень быстро. Подключил его, настроил соотв. образом. Далее все свелось к нажатию 2-х кнопок — открыть страницу и пересохранить. Всё!
А он может таблицу привести отсюда:
<table cellspacing="0" cellpadding="0" width="615" border="1">
    <tbody>
        <tr>
            <td valign="top" width="492">
                Наименование МО
            </td>
            <td valign="top" width="123">
                Код ОКАТО
            </td>
        </tr>
        <tr>
            <td valign="top" width="492">
                Городской округ ....
            </td>
            <td valign="bottom" width="123">
                99 401 000 000
            </td>
        </tr>
        ...
    </tbody>
</table>

вот сюда:
<table>
    <tbody>
        <tr>
            <td>
                Наименование МО
            </td>
            <td>
                Код ОКАТО
            </td>
        </tr>
        <tr>
            <td>
                Городской округ ....
            </td>
            <td>
                99 401 000 000
            </td>
        </tr>
        ...
    </tbody>
</table>

Ну то есть убрать мусор и оставить голую структуру таблицы?
Легко. Просто разрешить ему теги tbody, thead, td, tr, th, table. И не разрешать никаких аттрибутов. Получится как раз то, что вы хотите.
В данном случае даже проще — просто запретить атрибуты.
Если мне не изменяет память, то запрещены все аттрибуты по умолчанию. Даже href, src и пр. Но я могу ошибаться, точно не помню. Не так давно добавлял в конфиг rolspan и colspan, в конфиг 2х-летней давности. Просто за всё это время эти аттрибуты не пригодились, а изначально я про них попросту забыл :)
Мне вот всегда было интересно узнать о преимуществах HTML Purifier в сравнении с Jevix. Нет, я конечно понимаю, что Purifier легко масштабируется при помощи фильтров. Но такую плевую задачку как подмена ссылки и добавление target="_blank" можно решить пропустив текст через функцию после обработки Jevix'ом.
Думаю тут все достаточно очевидно. Из описания недостатков на главной Jevix:
Недостатки
Jevix разделяет строки br-ами. Делать абзацы (p) он не умеет, и, в существующей архитектурной концепции вряд ли научится
Автор больше не развивает проект, перешёл на Python и постепенно забывает синтаксис PHP. Однако PULL-реквесты приветствуются
К сожалению Purifier слишком медленный и прожорливый. В данный момент используем связку Tidy + Htmlawed. Tidy работает как демон, в случае если tidy поперхнулся, то кидаем на htmlawed с простеньким конфигом.
Использую HTML Purifier c Drupal, очень довольна! Позволяет отказаться от десятка мелких модулей, которые делают rel=nofollow, безопасную вставку всяких iframe'ов (карты, видео) и т.д. Настроить можно из UI.

Это библиотека не отличается быстрой, поэтому не стоит использовать её для вывода данных на лету.

Drupal это дело кеширует.

Надо будет попробовать подцепить кастомный компонент по типу вашего TargetBlankAll.
Ох тыж ёмоё…
На самом деле было интересно покопаться, да и самое не тривиальное это добавление собственного модуля.
Спасибо за наводку!
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.