替换/限制 CKEDITOR 中的非标准字符

Replace / restrict non-standard characters in CKEDITOR

本文关键字:非标准 字符 CKEDITOR 限制 替换      更新时间:2023-09-26

我有一个CKEDITOR实例(版本4.5.7),用户可以在其中输入内容。此内容发布到带有排序规则SQL_Latin1_General_CP1_CI_AS的数据库字段。

当用户从 Word 或类似的富文本编辑器粘贴文本时,就会出现问题。特别是两个字符在到达数据库时会格式不正确:” (”)– (–)

我已经将config.entities设置为 false,以防止字符转换为其 HTML 等效项。现在我正在寻找一个可以拦截该过程以查找/替换任何违规角色的地方。虽然这种事情的javascript很容易(text = text.replace('”', '"')),但我不确定把它放在哪里才能做到这一点。我尝试过将它放在 CKEDITOR.htmlParser.basicWriter 函数中的不同位置,但到目前为止没有任何效果。

这似乎是一个相当普遍的问题 - 是否有办法在编辑器上设置排序规则以使其与数据库匹配?

谢谢你的任何建议。

我一直

在基本的Writer函数中徘徊,直到最终我惊讶地发现一个真正有效的地方。基本上,这是我用来解决这个问题的过程,而无需编辑 ckeditor.js

  1. 下载并打开 ckeditor.js 文件的未压缩版本。
  2. 找到整个CKEDITOR.htmlParser.basicWriter函数并将其复制到 config.js 文件的底部。这基本上重新定义了功能,覆盖了真正的功能,但允许我们对它进行自定义,而不必破坏未来的更新。
  3. 在 config.js 中复制的函数中,找到 getHtml 部分并在返回之前自定义html变量。下面是一个模板,可帮助您找到此部分

getHtml: function( reset ) {
var html = this._.output.join( '' );
  // this is where we can replace individual characters or make other 
  // customizations
  html = html.replace('”', '"');
  html = html.replace('–', '-');
  if ( reset )
    this.reset();
  return html;
}