web-dev-qa-db-fra.com

CKEditor indésirable & nbsp; personnages

Comment puis-je désactiver CKEditor pour m'obtenir chaque fois  , quand je ne les veux pas? J'utilise CKEditor avec l'adaptateur jQuery. 

Je ne veux pas avoir de balises  .

37
user969724

Après quelques recherches, je pourrais faire la lumière sur ce problème - malheureusement, il n’existe pas de solution prête à l'emploi.

Dans l'éditeur CKE, il existe quatre manières de créer un espace sans pause (tout le monde en sait plus?):

  1. Remplissage automatique des blocs vides . Cela peut être désactivé dans la configuration:

    config.fillEmptyBlocks = false;
    
  2. Insertion automatique en appuyant sur la touche TAB . Cela peut être désactivé dans la configuration:

    config.tabSpaces = 0;
    
  3. Conversion de doubles espaces en SPACE + NBSP. Ceci est un comportement de navigateur et ne sera donc pas corrigé par l'équipe de CKEditor . Il peut s'agir de serveurs fixes ou d'un javascript côté client onunload. Peut-être que ce php est un début:

    preg_replace('/\s \s/ig', ' ', $text);
    
  4. Par copier/coller. Si vous collez un UTF-8 no-break space ou deux espaces, CKEditor le convertira automatiquement. La seule solution que je vois ici est une regex comme ci-dessus. config.forcePasteAsPlainText = true; n'aide pas.

Résumé: Pour supprimer tous les espaces insécables, vous devez écrire une fonction supplémentaire qui nettoie les entrées de l'utilisateur.

_ {Les commentaires et suggestions supplémentaires sont grandement appréciés! (J'utilise ckeditor 3.6.4)} _

50
Tapper

Il y a une autre manière qu'un caractère d'espace insécable peut se produire. En entrant simplement un espace à la fin d'une phrase.

CKEditor échappe aux entités HTML de base avec les entités latines et grecques.

Ajoutez ces options de configuration pour éviter cela (vous pouvez également les ajouter dans votre fichier de configuration):

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 = '';

 });
});

Ces options empêcheront CKEditor d’échapper à nbsp gt lt amp ' " un autre caractère latin et grec.

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

9
gabriel

Essayer:

config.basicEntities = false;

pour moi corrigé le problème.

9
Deyvid.

dans config.js :

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

Cela fonctionne pour moi, après que vous puissiez imprimer du texte avec php: html_entity_decode( $someText );

4
kampageddon

J'ai remarqué que certaines opérations d'édition de texte, telles que la suppression d'un caractère (en appuyant sur le bouton Retour arrière), divisent le nœud de texte modifié en deux. Frapper la barre d'espace à la fin de ce nouveau nœud de texte crée toujours &nbsp; au lieu de l'espace normal. J'appelle normalize()http://www.w3schools.com/jsref/met_node_normalize.asp pour modifier l'élément après le changement:

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

Ceci est une mauvaise solution

config.basicEntities = false;
  • Parce que cela ne vous permet pas d'insérer le code JS dans le formulaire en tant que texte. Comme ça <script type="text/javascript" src="/scripts/redactor/ckeditor/ckeditor.js"></script>
  • En outre, des blocs vides tels que <p>&nbsp;</p> ne peuvent pas spécifier d'indentation dans le texte car le caractère &nbsp; sera supprimé (config.fillEmptyBlocks = true;).

C'est la bonne solution

$text = preg_replace("#([^>])&nbsp;#ui", "$1 ", $text);
  • Ceci est une fonction PHP qui remplace tous les caractères &nbsp; sur un espace, à l'exception de ceux se trouvant à l'intérieur de la balise comme <p>&nbsp;</p>.
  • Le code de fonction n'est pas le plus élégant, vous pouvez suggérer votre propre version.
0
user3833195

J'avais déjà eu à jouer avec config.js, donc pour réparer '?' montrant dans safari je me suis retrouvé avec 3 lignes dans config.js 

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

J'ai eu les mêmes problèmes pour créer des tables. Ce que j’ai vu, c’est que si j’ai créé les tables avec la règle css align="left", les <p>&nbsp;</p> sont ajoutés, mais si j’ai modifié la règle css en align="center", je pouvais éditer les paragraphes et ils n’ont pas été rajoutés.

0
Victor Priceputu