如何防止CKEditor替换空格?

时间:2013-01-25 14:01:01

标签: ckeditor

我遇到CKEditor 4的问题,我需要输出没有任何html实体,所以我在配置中添加了config.entities = false;,但是在  >

  • 插入内联标记:将之前的空格替换为 
  • 文字已粘贴:即使使用 
  • ,每个空格也会被config.forcePasteAsPlainText = true;替换

您可以通过输入

any demo上查看该内容
  

测试测试

例如

你知道我怎么能阻止这种行为吗?

谢谢!

3 个答案:

答案 0 :(得分:10)

这些实体:

// Base HTML entities.
var htmlbase = 'nbsp,gt,lt,amp';

是一个例外。要摆脱它们,您可以设置basicEntities: false。但正如docs提到的那样,这是一种不安全的设置。因此,如果您只想删除 ,那么我应该只对输出数据使用regexp(例如,通过添加#getData的监听器),或者,如果您想更精确,请将自己的规则添加到{ {1}}就像htmlFilter插件does here

答案 1 :(得分:10)

基于Reinmars接受的答案和Entities plugin我创建了一个带有HTML过滤器的小插件,用于删除多余的 个实体。正则表达式可以改进以适应其他情况,所以请编辑这个答案。

/*
 * Remove   entities which were inserted ie. when removing a space and
 * immediately inputting a space.
 *
 * NB: We could also set config.basicEntities to false, but this is stongly
 * adviced against since this also does not turn ie. < into &lt;.
 * @link http://stackoverflow.com/a/16468264/328272
 *
 * Based on StackOverflow answer.
 * @link http://stackoverflow.com/a/14549010/328272
 */
CKEDITOR.plugins.add('removeRedundantNBSP', {
  afterInit: function(editor) {
    var config = editor.config,
      dataProcessor = editor.dataProcessor,
      htmlFilter = dataProcessor && dataProcessor.htmlFilter;

    if (htmlFilter) {
      htmlFilter.addRules({
        text: function(text) {
          return text.replace(/(\w)&nbsp;/g, '$1 ');
        }
      }, {
        applyToAll: true,
        excludeNestedEditable: true
      });
    }
  }
});

答案 2 :(得分:0)

我需要更改Imeus发送的正则表达式,就我而言,我使用TYPO3,并且需要编辑后端编辑器。这个没有用。也许它可以帮助另一个有相同问题的人:)

return text.replace(/&nbsp;/g, ' ');