如何在HTML及Blade.php中正确使用&(ampersand/和号)特殊字符
问题原因
Laravel Blade 默认会对使用{{ }}语法输出的内容做HTML实体自动转义,你遇到的是二次转义问题:你在label字段里提前写了&实体编码,传到组件后用{{ }}输出时,Blade会把编码里的&再次转义为&,最终页面渲染出来的是&源码,而不是预期的&符号。
解决方法
根据你的实际场景选择对应方案即可:
- 场景1:DropDown组件的label用Blade原生
{{ }}语法输出
直接把label字段内容改成原生&即可,不需要手动写HTML实体,Blade会自动完成合规转义,页面最终会正常显示&符号:'label' => 'ROC & FH Call outs', - 场景2:你需要在label里插入其他HTML标签(比如加粗、斜体),或者确认组件输出不需要自动转义
保持label写原生内容,把组件里输出label的语法改成Blade不转义语法{!! $label !!}即可,注意如果label内容包含用户提交的不可信数据,需要先做XSS过滤再使用该语法。 - 场景3:DropDown是前端JS组件渲染(比如Select2、自定义Vue/React组件等)
直接给label传原生&即可,不要写HTML实体,JS组件会自动处理特殊字符的渲染。
内容的提问来源于stack exchange,提问作者awthz Zei
相关产品推荐
相关产品推荐

