You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel8集成TinyMCE5提交表单无法获取完整HTML输出

问题根源

你遇到这个问题核心是两点:

  • 你虽然写了let innerText = tinyMCE.activeEditor.getContent({format : 'raw'});获取编辑器完整内容,但这个变量根本没被放进提交参数里。
  • TinyMCE初始化后会隐藏原textarea,默认不会实时把编辑生成的完整HTML同步回原textarea,你直接调用$(this).serializeArray()拿到的只是textarea的初始值,或者是TinyMCE同步的纯文本内容,自然会丢失外层标签。
修复方案

选任意一种方式修改即可:

方案1:提交前手动同步编辑器内容到表单

在序列化表单之前调用TinyMCE的triggerSave()方法,这个方法会自动把当前所有编辑器的内容写回对应的原生textarea,之后序列化表单就能拿到完整HTML:

$('form').on('submit', function (e) {
    e.preventDefault();
    // 加这一行就够
    tinymce.triggerSave();
    let route = $(this).data('route');
    let formData = $(this).serializeArray();

    $.ajax({
        url: route,
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        },
        type: "POST",
        data: formData,
        beforeSend: function () {
            $('body').css('cursor', 'progress');
        },
        complete: function () {
            $('body').css('cursor', 'default');
        },
        success: function (response) {
            // 你的业务逻辑
        },
    });
})

方案2:手动把获取到的编辑器内容追加到提交参数

如果你不想做全局同步,直接把你已经拿到的innerText变量塞进formData就行,注意要确保字段名和后端接收的一致:

$('form').on('submit', function (e) {
    e.preventDefault();
    let route = $(this).data('route');
    let innerText = tinyMCE.activeEditor.getContent({format : 'raw'});
    let formData = $(this).serializeArray();
    // 追加/覆盖innerText字段
    formData.push({name: 'innerText', value: innerText});

    // 后续ajax逻辑保持不变即可
    $.ajax({
        // 原有配置
    });
})

一劳永逸的配置

你可以在TinyMCE初始化时加个监听,每次内容变更就自动同步回textarea,之后不管是ajax提交还是普通表单提交,都不用额外写同步逻辑:

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 keyup blur', function() {
            editor.save();
        });
    }
});
Laravel端注意事项

如果前端调整完后,后端存库时还是丢失HTML标签,检查三处:

  • 接收参数时不要用strip_tags()等函数手动过滤内容
  • 对应模型如果有修改器、$casts配置,确认没有对该字段做HTML清理
  • 如果开启了Blade的默认转义,回显内容的时候要用{!! $content !!}而不是{{ $content }},后者会把HTML标签转义成实体。

内容的提问来源于stack exchange,提问作者Tugce Aksoz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 20:15:44