Blade模板中如何在短三元语句内渲染HTML?
解决Blade短三元语句中渲染HTML标签的问题
嘿,我完全懂你遇到的困扰——Blade的{{ }}语法会自动转义HTML内容,所以你写的<span>标签才会原样输出而不是被渲染。要在短三元表达式里实现HTML渲染,其实很简单,只需要把整个三元表达式包裹在Blade的非转义输出语法{!! !!}里就行。
正确的写法
把你原来的代码改成这样:
{!! Auth::user()->settings['font'] == null ? "<span class='fa fa-check'></span>" : '' !!}
这里我把false换成了空字符串'',因为直接输出false在Blade里会显示0,空字符串更符合“什么都不显示”的预期。
为什么这样可行?
Blade的{!! !!}语法的作用就是告诉模板引擎:不要转义这个表达式的输出内容。所以当你的三元条件满足时,<span>标签会被直接渲染成HTML元素;条件不满足时,就输出空内容,页面上不会有多余的字符。
更易读的替代写法
如果觉得短三元的可读性不够好,也可以用Blade的@if指令来实现同样的效果,逻辑更清晰:
@if(is_null(Auth::user()->settings['font'])) <span class='fa fa-check'></span> @endif
注意事项
使用{!! !!}的时候要注意XSS安全风险——如果输出的内容包含用户输入的未过滤数据,可能会导致跨站脚本攻击。不过你这里的<span>是固定的静态内容,所以完全不用担心这个问题。
内容的提问来源于stack exchange,提问作者Chud37
相关产品推荐
相关产品推荐

