Laravel框架下CKEditor4输出HTML实体标签无法正常解析问题
问题原因
你遇到的是Laravel框架默认的输出自动转义机制导致的问题:CKEditor4提交的内容本身是正常的HTML标签,但前端展示时如果使用{{ }}语法输出,Laravel会自动将<、>等HTML标签符号转义为实体字符,导致浏览器不会解析这些标签,只会直接把标签原文显示出来。
解决步骤
- 修改前端展示的输出语法
找到你展示文章内容的Blade模板,把原来输出body字段的代码:
{{ $post->body }}
替换为不转义HTML的输出语法:
{!! $post->body !!}
修改后浏览器就会正常解析HTML标签,粗体、斜体、段落等样式就会生效。
- (可选)安全加固
直接输出用户提交的原生HTML存在XSS注入风险,如果你需要过滤恶意脚本标签,可以安装Laravel的HTMLPurifier扩展,在输出或者存储内容时过滤危险代码,过滤后输出的写法如下:
{!! Purifier::clean($post->body) !!}
- (异常排查)验证存储内容是否正常
如果修改输出语法后依然不生效,可以打开phpMyAdmin查看posts表的body字段存储的内容:
- 如果存储的内容已经是
<p>这类转义后的实体,说明提交环节存在额外的转义逻辑,检查是否有自定义中间件、模型修改器自动转义了输入内容,你的控制器存储逻辑本身没有问题,不需要修改。 - 如果存储的是正常的
<p><strong>xxx</strong></p>格式,就只需要修改前端输出语法即可。
内容的提问来源于stack exchange,提问作者All_Semicolons
相关产品推荐
相关产品推荐

