2016-12-22 101 views
1

我想在位於Yii2 GridView的列中顯示一些HTML編碼的字符串作爲純HTML。這來自於數據庫的字符串看起來是這樣的:Yii2中的HTML GridView

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

如果我只用HTML解碼Html::decode($theStringAbove);顯示它,然後我得到這個在列:

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

然而,什麼我瞄準只是變得Testing HTML並在代碼中的HTML字詞周圍有span標記,但不顯示爲字符串。

我試過設置format屬性的不同值,如raw,urlhtml沒有成功。我也沒有問題寫一個自定義函數返回value屬性旁邊的正確輸出,這只是我無法弄清楚如何到達我需要的輸出。歡迎任何建議,謝謝!

編輯:這裏是一個小的代碼片段,如果這是有幫助的:

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

格式'raw'應該給你正確的HTML輸出。你能爲你的這個有問題的專欄顯示配置嗎? – Bizley

+0

如上所述,我已經嘗試過生。儘管我會用一小段代碼片段來更新這個問題。 – 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; 

嘗試解碼它兩次如下:

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

哦,對,我的不好。 – Bizley

+0

@mmvsbg添加適當的解決方案。歡呼 – Bizley

+0

輸出的'var_dump'表明它只編碼了一次,但我認爲第一次解碼只是將編碼後的字符轉換回字符串,第二次解析爲HTML。兩個解碼器確實是解決方案。我只是要求你將這段代碼片段添加到你的答案中,以便完成: ''value'=> function($ model){return Html :: decode(Html :: decode($ model-> replace)) ; }' – mmvsbg