Задать вопрос
@kovecif

Вывод и форматирование текста php yii2?

Здравствуйте, делаю блог в учебных целях и столкнулся с проблемой вывода текста постов. У меня в каждом посте текст форматирован (теги параграфов, у них свои классы), но в бд это хранится, как обычный текст. Записывать теги с классами в бд, наверно плохая идея. Еще на странице конкретного поста могут быть вставлены картинки, в разных местах(на некоторых страницах картинок вообще нет). Теги img хранить в базе, тоже наверно плохой вариант. Какие хорошие решения этих задач есть?
  • Вопрос задан
  • 420 просмотров
Подписаться 2 Простой 1 комментарий
Решения вопроса 2
myks92
@myks92 Куратор тега Yii
Нашёл решение — пометь вопрос ответом!
Хранить так — Обычная практика. Чтобы выводить используют примерно так:

HTML purifier
<?= Yii::$app->formatter->asHtml($model->content, [
                'Attr.AllowedRel' => ['nofollow'],
                'HTML.SafeObject' => true,
                'Output.FlashCompat' => true,
                'HTML.SafeIframe' => true,
                'AutoFormat.AutoParagraph' => true,
                'URI.SafeIframeRegexp' => '%^(https?:)?//(www\.youtube(?:-nocookie)?\.com/embed/|player\.vimeo\.com/video/)%',
            ]) ?>


Однако. Такой вариант может повлиять в некоторых случаях на загрузку страниц. Так как весь текст переформатируемая при загрузке страниц. Если важна будет производительность, то в базе данных создайте два поля. Одно оригинальное, другое отформатированное. В отформатированное поле помещайте текст, который прогнали через форматирование оригинального текста. И при считывании вам уже не нужны никакие форматтеры. А страницы будут грузиться быстрее.
Ответ написан
Комментировать
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
Никаких проблем с тем чтобы хранить HTML в базе нету.
Это нормальная практика, особенно если посты пишутся с использованием wysiwyg редактора.
Wordpress так делает.

Нюансы могут быть только
- если вам нужно в листинге постов показать часть поста, и тогда можно перед выводом очищать текст от тегов через strip_tags() или хранить в БД 2 версии: html и чисто текстовую версию
- использовать html sanitizer напр. https://github.com/ezyang/htmlpurifier или https://github.com/tgalopin/html-sanitizer для того чтобы очистить пост от внедрения лишних тегов или каких-то зловредных вещей. Это для случаев когда посты сможет писать кто угодно, и например вы не хотите чтобы они могли внедрить тег <script> и тд.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы