我有一个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
- 下载并打开 ckeditor.js 文件的未压缩版本。
- 找到整个
CKEDITOR.htmlParser.basicWriter
函数并将其复制到 config.js 文件的底部。这基本上重新定义了功能,覆盖了真正的功能,但允许我们对它进行自定义,而不必破坏未来的更新。 - 在 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;
}