Код: Выделить всё
[
'label' => 'Выбранные модули',
'attribute' => 'user_id',
'value' => html_entity_decode($model->moduleListToString())
],
Код: Выделить всё
<ul><li>[65] - Модуль 1</li><li>[66] - Модуль 2</li></ul>
Код: Выделить всё
[
'label' => 'Выбранные модули',
'attribute' => 'user_id',
'value' => html_entity_decode($model->moduleListToString())
],
Код: Выделить всё
<ul><li>[65] - Модуль 1</li><li>[66] - Модуль 2</li></ul>
Код: Выделить всё
'format' => 'raw',
Код: Выделить всё
[['module_name'],'filter','filter'=>'\yii\helpers\HtmlPurifier::process']
Код: Выделить всё
<?= \yii\helpers\HtmlPurifier::process($module_name) ?>
Следить нужно не за вводом, а за выводом через Html::encode(...).Alexum писал(а):И ещё такой момент. Это конечно дело каждого, но лучше следить за вводом содержимого, которое потом может так потребоваться вывести.
Следить за выводом конечно нужно, но никто не запрещает заодно и за вводом последить (например, если нет желания хранить в БД потенциально опасные данные). В общем по желанию.
Это не всегда справедливо. Если выводить данные планируется через Purifier (например, использовать в GridView 'format' => 'html'), то чистить лучше на входе, иначе будут тормоза на выходе. Так что всё зависит от тормознутости "очищалки".
Это и есть тот кейс, о котором я писал выше. Для админа эти данные придётся выводить с применением 'format' => 'html' (прогонять через Purifier). Соответственно, при табличном выводе Purifier сработает десятки раз подряд, страничка будет прогружаться медленно. А т.к. в админке нужны самые свежие и актуальные состояния вещей, то кэширование там неприменимо. Вот тут-то и помогает фильтрация на входе: как вы и сказали - сохраняем в одну колонку raw_html, а в другую - purified_html. На выходе юзаем purified_html в формате 'raw'.rak писал(а): ↑2017.01.09, 17:30 хм, ну вот допустим такая задача:
- пользователь может писать посты с ограниченным кол-вом html тегов(допустим, b и i)
- администратор может писать посты(и редактировать посты пользователя) с неограниченным кол-вом тегов
Не логичнее ли тут через сценарии прогонять текст через HtmlPurifier с 2мя разрешенными тегами при сохранении для пользователя и оставлять в нетронутом виде для админа?
В случае текста для Markdown или Purifier проблема тормознутости решается либо внешним кешем, либо кешированием в отдельное поле filtered_text в БД. Иначе это боль потерянных кусков текста при редактировании. Но к простому стрингу module_name с Html::encode это не относится.rugabarbo писал(а):Это не всегда справедливо. Если выводить данные планируется через Purifier, то чистить лучше на входе, иначе будут тормоза на выходе. Так что всё зависит от тормознутости "очищалки".
а можно подробнее?
Да, я это и имел в виду. Кэширование в отдельное поле БД удобнее, потому что очищенное и неочищенное лежит рядом, в одной таблице.ElisDN писал(а): ↑2017.01.09, 17:42В случае текста для Markdown или Purifier проблема тормознутости решается либо внешним кешем, либо кешированием в отдельное поле filtered_text в БД. Иначе это боль потерянных кусков текста при редактировании. Но к простому стрингу module_name с Html::encode это не относится.rugabarbo писал(а):Это не всегда справедливо. Если выводить данные планируется через Purifier, то чистить лучше на входе, иначе будут тормоза на выходе. Так что всё зависит от тормознутости "очищалки".
Если бы при такой фильтрации человек захотел мне на сайте написать комментарий:rak писал(а):а можно подробнее?
Код: Выделить всё
Правильно ли я оформил подвал:
<footer class="footer">
<div class="container">
<p class="pull-left">© My Company <?= date('Y') ?></p>
<p class="pull-right"><?= Yii::powered() ?></p>
</div>
</footer>
Ответьте, плиз!
Код: Выделить всё
<p>Правильно ли я оформил подвал:</p>
<p>&copy; My Company <?= date('Y') ?></p>
<p><?= Yii::powered() ?></p>
<p>Ответьте, плиз!</p>