web-dev-qa-db-ja.com

CKEditorの不要なnbsp。キャラクター

CKEditorを無効にして毎回取得するにはどうすればよいですか 、私はそれらをしたくないとき? jQueryアダプターでCKEditorを使用しています。

 タグ。

39
user969724

いくつかの研究の後、私はこの問題にいくらかの光を当てるかもしれません-残念ながら、すぐに使える解決策はありません。

CKEditorでは、ノーブレークスペースが発生する可能性のある4つの方法があります

  1. 空のブロックの自動充填 。これは設定で無効にできます:

    config.fillEmptyBlocks = false;
    
  2. TABキーを押したときの自動挿入 。これは設定で無効にできます:

    config.tabSpaces = 0;
    
  3. 二重スペースをSPACE + NBSPに変換します。 これはブラウザの動作であるため、CKEditorチームによって修正されません 。サーバー側で修正するか、クライアント側のJavaScript onunloadで修正することができます。たぶん、このPHPはスタートです:

    preg_replace('/\s \s/ig', ' ', $text);
    
  4. コピーして貼り付けます。 TF-8 no-break space またはダブルスペースを貼り付けると、CKEditorは自動的に変換します。ここで私が見る唯一の解決策は、上記のように正規表現を行うことです。 config.forcePasteAsPlainText = true;は役に立ちません。

概要:すべての改行なしスペースを取り除くには、ユーザー入力をクリーンにする追加の関数を作成する必要があります。

コメントや提案は大歓迎です! (ckeditor 3.6.4を使用しています)

51
Tapper

改行しないスペース文字が発生する別の方法があります。文の最後にスペースを入力するだけです。

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.confighttp://docs.ckeditor.com/source/plugin48.html#CKEDITOR-config -cfg-basicEntities

9
gabriel

試してください:

config.basicEntities = false;

私のために問題を修正しました。

9
Deyvid.

in 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
kampageddon

文字を削除する([Backspace]ボタンを押す)などのテキスト編集操作が、編集したテキストノードを2つに分割していることに気付きました。このような新しく作成されたテキストノードの最後でスペースバーを押すと、通常のスペースではなく、常に_&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();
        }
    });
 });
_
2
joso

これは悪い解決策です

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>などのタグ内の文字は除きます。
  • 関数コードは最もエレガントではありません。独自のバージョンを提案できます。
0
user3833195

私はすでにconfig.jsをいじる必要があったので、「?」を修正するためにサファリに現れるconfig.jsで3行になってしまいました

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

いくつかのテーブルの作成でも同じ問題が発生しました。私が見たのは、CSSルールalign="left"を使用してテーブルを作成した場合、<p>&nbsp;</p>が追加されますが、CSSルールをalign="center"に変更した場合、段落を編集でき、再び追加されません。

0