2016-12-22 7 views
1

Я пытаюсь отобразить некоторые кодированные HTML строки как чистый HTML в столбце, расположенном в Yii2 GridView. Строка, которая приходит из базы данных выглядит следующим образом:HTML в Yii2 GridView

Testing <span class='test'>HTML</span> 

Если я просто отобразить его с помощью HTML расшифровывает Html::decode($theStringAbove); тогда я получаю это в колонке:

Testing <span class='test'>HTML</span> 

Однако то, что я целью просто получает Testing HTML и имеет тег span вокруг HTML-слова в коде, но не отображается в виде строки.

Я пробовал устанавливать различные значения в атрибут format, такой как raw, url и html не увенчался успехом. У меня также нет проблем с записью пользовательской функции для возврата правильного вывода рядом с атрибутом value, просто я не могу понять, как добраться до нужного мне результата. Любые предложения приветствуются, спасибо!

EDIT: Вот небольшой фрагмент кода, если это полезно:

[ 'format' => 'raw', 
    'value' => function($model) { return Html::decode($model->text); }, 
    'label' => Yii::t('app', 'Some Label')] 
+0

Формат 'raw' должен давать вам правильный вывод HTML. Можете ли вы показать конфигурацию для этого проблемного столбца? – Bizley

+0

Как уже отмечалось выше, я уже пробовал использовать raw. Однако я обновляю этот вопрос небольшим фрагментом кода. – mmvsbg

+0

Вы используете DetailView или GridView? Вышеприведенный код выглядит для DetailView. – topher

ответ

2

Вывод базы данных, вероятно, кодируется дважды, вместо

Testing &lt;span class=&#039;test&#039;&gt;HTML&lt;/span&gt; 

это

Testing &amp;lt;span class=&amp;#039;test&amp;#039;&amp;gt;HTML&amp;lt;/span&amp;‌​gt; 

Try для декодирования это два раза:

'value' => function ($model) { 
    return Html::decode(Html::decode($model->replace)); 
} 
+0

О, хорошо, мое плохое. – Bizley

+0

@mmvsbg Правильное решение добавлено. Cheers – Bizley

+0

«var_dump» на выходе показывает, что он закодирован только один раз, но я думаю, что происходит то, что первый декод просто возвращает закодированные символы в строку, а второй анализирует их как HTML. Два декодирования один за другим действительно являются решением. Я просто попрошу вас добавить этот фрагмент кода к вашему ответу, чтобы он был полным: ''value' => function ($ model) {return Html :: decode (Html ​​:: decode ($ model-> replace)) ; } ' – mmvsbg