Доброе утро.
Возник вопрос на тему вывода форматированного текста в views.
Сайт сделан на Yii2.
Смысл в следующем. Пользователь загружает текстовый файлы(.docx, .odt, .txt), текст с файла считывается и записывается в базу. Текст может содержать в себе таблицы, списки и т.д. и т.п.
При выводе на странице сайта текст выводится при помощи Html::encode() и если в тексте есть html-теги, то, естественно, все теги экранируются.
Чтобы сохранить форматирование можно отключить экранирование html-тегов используя Html::decode(), но тогда возникает другая проблема. Пользователь может вписать в файл какой либо js код или ещё какую-то гадость.
Можно обработать текст при помощи strip_tags(), передав вторым параметром, какие теги не очищать.
Но будет ли это достаточным способом?
Вопрос в следующем, как можно сохранить форматирование текста, но при этом избежать срабатывания js кода или какой либо гадости?
В Yii есть yii\helpers\HtmlPurifier. Кстати советую его всегда использовать перед записью в базу данных полученных от пользователя.
Вот полные доки по этой библиотеке htmlpurifier.org
Там можно гибко настроить чистку любых тегов.
Такой вопрос.
Если писать в базу текст обработанный через HtmlPurifier, то при выводе в textarea для редактирования он же всё равно обрабатывается Html::encode()?
Максим Тимофеев: использую именно yii\bootstrap\ActiveForm. Например, в yii\bootstrap\Nav есть "encodeLabels => false" и encode отключает, а в ActiveForm никак не пойму как это сделать
Максим Тимофеев: Поле в форме не одно, есть ещё поля.
>>>Но сам value для text aria не энкодится.
А как же тогда это - https://github.com/yiisoft/yii2/blob/master/framew...
Разве это не кодирование value?
Если использовать просто , без виджета, то всё равно, теги вывести не получится.
Поэтому пока textarea скрыл при помощи css, а текст вывожу в обычный div. Редактирование файлов будет путём скачивания на комп, редактирование, а потом загрузка отредактированного файла обратно на сайт.
slo_nik: Вы пишите:
Если использовать просто , без виджета, то всё равно, теги вывести не получится.
Но до этого слово ТЕГИ не фигурировало. При чем тут теги и почему не получится их вывести
Максим Тимофеев: Слово "теги" в вопросе присутствует и не раз. Вывести форматированный текст, значит вывести с тегами, которые могут быть в тексте. И вывести так, чтобы не показывало тег