You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让PHP函数返回的HTML内容在页面中正确渲染?

如何让PHP函数返回的HTML内容在页面中正确渲染?

嘿,我完全懂你碰到的问题——你希望getDisplayName()返回的带图标的HTML代码能直接在页面上渲染出绿色的校验图标,但现在它却变成了纯文本显示对吧?核心问题出在模板里的转义处理上,咱们一步步来解决:

问题根源

你在模板里用了Html::encode($title),这个方法是Yii框架用来防止XSS攻击的,它会把所有HTML标签转换成对应的字符实体(比如<变成&lt;,>变成&gt;)。所以你的<i>标签根本没被浏览器当成HTML解析,而是直接以文本形式展示了。

解决方案

根据你的场景,有两种靠谱的处理方式:

1. 直接输出(适合内容完全可控的场景)

如果能确定$title的内容完全由你的代码生成,不存在用户输入的危险内容,那可以直接去掉Html::encode(),把模板代码改成:

<h1 class="<?= $classPrefix ?>"><?= $title ?></h1>

这样浏览器就会正常解析返回的HTML标签,渲染出你想要的图标。

2. 标记为安全内容(推荐,更规范)

如果担心潜在的XSS风险,或者未来可能有用户输入的内容混入,推荐用Yii提供的Html::raw()方法,它会明确告诉框架:这段内容是安全的,不需要转义。用法如下:

<h1 class="<?= $classPrefix ?>"><?= Html::raw($title) ?></h1>

这种方式既保留了安全规范,又能让HTML代码正常渲染。

小补充

另外可以检查下getDisplayName()里的HTML标签写法,自闭合的<i/>在部分浏览器兼容性可能不太好,建议改成标准闭合形式:

$check_mark = '<i class="fa fa-check-circle" style="font-size:22px;color:green"></i>';

备注:内容来源于stack exchange,提问作者developer_w

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 08:39:08