【问题标题】:HTML in Yii2 GridViewYii2 GridView 中的 HTML
【发布时间】:2016-12-22 09:56:18
【问题描述】:

我正在尝试将一些 HTML 编码字符串显示为位于 Yii2 GridView 中的列中的纯 HTML。来自数据库的字符串如下所示:

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

如果我只是使用 HTML 解码 Html::decode($theStringAbove); 显示它,那么我会在列中得到这个:

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

但是,我的目标只是获取 Testing HTML 并在代码中的 HTML 单词周围添加 span 标记,但不显示为字符串。

我尝试为format 属性设置不同的值,例如rawurlhtml,但均未成功。我编写自定义函数以在value 属性旁边返回正确的输出也没有问题,只是我不知道如何获得我需要的输出。欢迎大家提出建议,谢谢!

编辑:如果有帮助,这是一个小代码 sn-p:

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

【问题讨论】:

  • Format raw 应该会给你正确的 HTML 输出。你能展示一下你这个有问题的列的配置吗?
  • 如上所述,我已经尝试过 raw。不过,我会用一个小代码 sn-p 来更新问题。
  • 您使用的是 DetailView 还是 GridView?上面的代码看起来是一个 DetailView。
  • 我正在使用 GridView
  • @mmvsbg 我已经测试了你的 sn-p,我在源代码中看到了 Testing HTMLTesting &lt;span class="test"&gt;HTML&lt;/span&gt;。这不是你想要的吗?

标签: html gridview yii2 formatting


【解决方案1】:

数据库输出可能被编码两次而不是

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));
}

【讨论】:

  • @mmvsbg 添加了正确的解决方案。干杯
  • 输出的var_dump 表明它只编码了一次,但我认为发生的事情是第一次解码只是将编码的字符恢复为字符串,而第二次解码将它们解析为 HTML。两个接一个解码确实是解决方案。我只是要求您将此代码 sn-p 添加到您的答案中,以使其完整:'value' =&gt; function($model) { return Html::decode(Html::decode($model-&gt;replace)); }
  • 不错的收获。然而,解码两次并不是解决方案。 @mmvsbg 你应该修复你的数据库数据。双重编码可能是其他地方出现问题的征兆。
  • 确实,这只是端点解决方案,您应该检查数据库保存。
  • 是的,这里似乎有一个潜在的问题,我会仔细检查为什么会发生双重编码。不过,感谢您的时间和帮助。
猜你喜欢
  • 1970-01-01
  • 2014-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多