CKEditor不需要的字符

时间:2012-03-16 17:13:10

标签: javascript jquery ckeditor

如果我不想要它们,我怎样才能禁止CKEditor每次 来找我?我正在使用带有jQuery适配器的CKEditor。

我不想要任何 代码。

10 个答案:

答案 0 :(得分:51)

经过一番研究后,我可能会对这个问题有所了解 - 遗憾的是,没有开箱即用的解决方案。

在CKEditor中有四种方式可以发生不间断的空间(任何人都知道更多?):

  1. Automatic filling of empty blocks。这可以在配置中禁用:

    config.fillEmptyBlocks = false;
    
  2. Automatic insertion when pressing TAB-key。这可以在配置中禁用:

    config.tabSpaces = 0;
    
  3. 将双空格转换为SPACE + NBSP。 This is a browser behavior and will thus not be fixed by the CKEditor team。它可以是固定服务器端或客户端javascript onunload。也许这个php是一个开始:

    preg_replace('/\s \s/ig', ' ', $text);
    
  4. 通过副本&糊。如果粘贴UTF-8 no-break space或双空格,CKEditor会自动转换它。我在这里看到的唯一解决方案就是如上所述进行正则表达式。 config.forcePasteAsPlainText = true;无效。

  5. 总结:要摆脱所有不间断空格,您需要编写一个清除用户输入的附加功能。

    非常感谢评论和进一步的建议! (我正在使用ckeditor 3.6.4)

答案 1 :(得分:9)

还有另一种方法可以发生不间断的空格字符。只需在句子末尾输入空格即可。

CKEditor与拉丁语和希腊语实体一起转义基本HTML实体。

添加这些配置选项以防止这种情况(您也可以在配置文件中添加它们):

CKEDITOR.on( 'instanceCreated', function( event ) {
 editor.on( 'configLoaded', function() {

  editor.config.basicEntities = false;
  editor.config.entities_greek = false; 
  editor.config.entities_latin = false; 
  editor.config.entities_additional = '';

 });
});

这些选项可以防止CKEditor转义nbsp gt lt amp ' "其他拉丁语和希腊字符。

来源: http://docs.ckeditor.com/#!/api/CKEDITOR.config http://docs.ckeditor.com/source/plugin48.html#CKEDITOR-config-cfg-basicEntities

答案 2 :(得分:8)

尝试:

  

config.basicEntities = false;

对我来说解决了这个问题。

答案 3 :(得分:4)

config.js

中的

CKEDITOR.editorConfig = function( config ) {
  config.enterMode = CKEDITOR.ENTER_BR; // <p></p> to <br />
  config.entities = false;
  config.basicEntities = false;
};

在您使用php打印文本后,它对我有用:html_entity_decode( $someText );

答案 4 :(得分:2)

我注意到一些文本编辑操作,比如删除一个字符(通过按Backspace按钮)将编辑的文本节点拆分为两个。在这样新创建的文本节点的末尾点击空格键总是导致&nbsp;而不是正常空间。我在更改后调用normalize() http://www.w3schools.com/jsref/met_node_normalize.asp来更改元素:

CKEDITOR.on('instanceReady', function (ck) {
    ck.editor.on("change", function (e) {
        var sel = ck.editor.getSelection();
        if (sel) {
            var selected = sel.getStartElement();
            if (selected && selected.$)
                sel.getStartElement().$.normalize();
        }
    });
 });

答案 5 :(得分:0)

我在创建一些表时遇到了同样的问题。我看到的是,如果我使用css规则创建表align="left",则会添加<p>&nbsp;</p>,但如果我将css规则更改为align="center",我可以编辑段落,它们是没有再添加。

答案 6 :(得分:0)

我已经不得不玩config.js,所以为了修复'?'出现在safari中我最后在config.js中找到了3行

config.fillEmptyBlocks = function (element) {
return true; // DON'T DO ANYTHING!!!!!};
config.entities = false;
config.basicEntities = false;

答案 7 :(得分:0)

这是一个糟糕的解决方案

config.basicEntities = false;
  • 因为它不允许您在表单中插入JS代码作为文本。就像<script type="text/javascript" src="/scripts/redactor/ckeditor/ckeditor.js"></script>
  • 一样
  • 此外,<p>&nbsp;</p>之类的空块也不会在文本中指定缩进,因为字符&nbsp;将被删除(config.fillEmptyBlocks = true;)

这是正确的解决方案

$text = preg_replace("#([^>])&nbsp;#ui", "$1 ", $text);
  • 这是一个替换空格中所有字符&nbsp;的PHP函数,除了<p>&nbsp;</p>
  • 之类的标记内的字符
  • 功能代码不是最优雅的,你可以推荐自己的版本。

答案 8 :(得分:-3)

如果您使用的是PHP,则可以使用以下内容:

preg_replace("/[\<]p[\>][\s]+&nbsp;[\<][\/]p[\>]/" , " " , $pre_comment);

这将删除:"<p> &nbsp;</p>"

享受:)

麦克斯韦

答案 9 :(得分:-3)

将此添加到您的config.js

config.enterMode = CKEDITOR.ENTER_BR,