Laravel项目中CKEditor存储内容前端显示为纯字符串而非HTML如何解决
问题原因
- Laravel Blade 模板的默认输出语法
{{ }}会自动对输出内容做HTML实体转义,这是框架内置的XSS攻击防护机制,因此直接用该语法输出富文本内容时,所有HTML标签都会被转为纯文本展示,不会被浏览器解析渲染。 - 你在存储内容前对CKEditor的输出做了
json_encode处理,从数据库读取内容后如果未先执行json_decode还原为原始HTML字符串,直接输出也会展示JSON格式的纯文本。
解决方案
- 先处理读取到的数据库内容:对取出的字段执行
json_decode操作,还原得到原始富文本HTML字符串,示例代码如下:
// 第二个参数设为true可返回数组格式,可根据你实际存储的结构调整参数 $aboutUsContent = json_decode($yourDatabaseField, true);
- 替换Blade模板的输出语法:将原有的
{{ }}输出写法替换为Blade的非转义输出语法{!! !!},该语法不会对内容做HTML转义,会直接输出原始内容供浏览器解析,示例写法如下:
{!! $aboutUsContent !!}
安全提示:由于非转义输出会直接解析HTML内容,你需要确保只有可信的后台管理员可以操作CKEditor编辑器,避免恶意人员插入危险脚本引发XSS安全问题。如果需要对外开放编辑器权限,建议引入HTMLPurifier等工具对富文本内容做标签过滤后再输出。
内容的提问来源于stack exchange,提问作者Adnan Nawaz
相关产品推荐
相关产品推荐

