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

如何阻止CKEditor 4.x调用setData时替换花括号及内容?

解决CKEditor 4.x setData时花括号被清空的问题

这个问题我之前也踩过坑,本质是CKEditor默认启用的Template插件(或类似的变量替换类插件)会把{...}识别为模板变量,如果没有对应的替换值,就直接替换成空字符串了。下面给你几个实用的解决办法:

1. 直接禁用Template插件(最简单粗暴)

如果你完全不需要模板功能,直接把这个插件关掉就行。在CKEditor的配置代码里添加:

CKEDITOR.config.removePlugins = 'template';
// 要是还有其他类似mailmerge这类会解析花括号的插件,也可以一起移除:
// CKEDITOR.config.removePlugins = 'template,mailmerge';

这样操作后,setData("Hello, {name} {family}, Welcome to ...")就能完全保留原始内容,不会再被清空花括号里的文本。

2. 转义花括号(保留模板功能时用)

如果还需要用模板,但想保留某些特定的花括号内容,可以把花括号转成HTML实体:

  • 将{替换为{
  • 将}替换为}

调用setData前先处理字符串:

const originalText = "Hello, {name} {family}, Welcome to ...";
const escapedText = originalText.replace(/{/g, '{').replace(/}/g, '}');
editor.setData(escapedText);

CKEditor会把转义后的实体当作普通文本渲染,显示出来还是{name} {family}。之后如果需要获取原始内容,在getData后再转回来即可:

const retrievedText = editor.getData().replace(/{/g, '{').replace(/}/g, '}');

3. 修改模板变量的语法(自定义规则)

要是想保留模板功能,但换一种变量格式(比如用[[...]]代替{...}),可以修改Template插件的默认规则:

// 覆盖默认的模板替换正则,只识别[[...]]格式的变量
CKEDITOR.plugins.template.replacePattern = /\[\[([^\]]+)\]\]/g;

// 设置你的模板替换值
CKEDITOR.config.template_replaceValues = {
  'name': 'John',
  'family': 'Doe'
};

这样只有[[name]]会被替换,原来的{name}就会被当作普通文本保留下来。

4. 排查其他可能的插件

如果上面的方法都没效果,检查下是不是启用了邮件合并(mail merge)这类第三方插件,它们也可能会解析{...}变量,找到对应插件后禁用或调整配置即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 17:27:39