Laravel集成TinyMCE提交数据时HTML标签被剥离如何解决
Laravel集成TinyMCE提交时HTML标签被剥离的解决方法
Laravel框架本身不会在请求接收阶段主动过滤请求参数里的HTML标签,标签丢失基本都是前端同步问题或者后端自定义清洗规则导致,按以下步骤排查修复即可:
- 优先排查TinyMCE内容同步问题
TinyMCE初始化后会隐藏原生的<textarea>,在页面上渲染独立的可编辑富文本区域,默认仅在表单触发原生submit事件时,才会把带完整HTML标签的内容同步回原生textarea。如果你是用AJAX提交、或者自定义了按钮提交逻辑,很容易在同步完成前就获取表单数据,最终拿到的是没有HTML标签的纯文本。
两种修复方式二选一即可:- 提交表单前手动触发同步:在提交逻辑的最前面加一行代码
tinymce.activeEditor.save(),执行后富文本内容会自动写入原生textarea,再取表单值提交就会携带完整HTML标签。 - 配置TinyMCE自动同步:在初始化参数里加change事件监听,内容变动时自动同步到textarea,配置示例:
tinymce.init({ selector: '#editor', plugins: [ "advlist", "anchor", "autolink", "charmap", "code", "fullscreen", "help", "image", "insertdatetime", "link", "lists", "media", "preview", "searchreplace", "table", "visualblocks", ], toolbar: "undo redo | styles | bold italic underline strikethrough | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image", // 新增自动同步配置 setup: function (editor) { editor.on('change', function () { tinymce.triggerSave(); }); } }); - 提交表单前手动触发同步:在提交逻辑的最前面加一行代码
- 排查后端数据清洗规则
如果在浏览器DevTools的Network面板里确认请求Payload里的innerText字段已经携带完整HTML标签,但后端拿到的是纯文本,再逐一检查后端逻辑:- 查看对应路由/控制器有没有挂载全局清洗输入参数的中间件
- 查看字段验证规则里有没有给
innerText加strip_tags相关过滤规则 - 如果安装了HTML Purifier类的内容净化扩展包,检查配置是否把所有HTML标签都加入了拦截名单,按需调整标签白名单即可。
排查小技巧:可以在控制器入口直接打印
$request->all()查看框架接收到的原始内容,和浏览器Payload里的发送内容做对比,能快速定位问题出在前端提交环节还是后端处理环节。
内容的提问来源于stack exchange,提问作者Tugce Aksoz
相关产品推荐
相关产品推荐

