47 votes

CKEditor non désiré &nbsp ; caractères

Comment désactiver CKEditor pour qu'il me reçoive à chaque fois ?   alors que je n'en veux pas ? J'utilise CKEditor avec un adaptateur jQuery.

Je ne veux pas avoir   tags.

1 votes

Comment saura-t-il lesquels vous voulez et lesquels vous ne voulez pas ? Voulez-vous les supprimer todos ou réduire les multiples, ou autre chose ? Comment y parviennent-ils en premier lieu ?

0 votes

Je ne veux pas qu'ils soient ajoutés tous

0 votes

OK, je voulais juste clarifier. Donc, lorsqu'un utilisateur appuie sur la barre d'espacement, le système n'ajoutera jamais plus d'un espace ? En d'autres termes, vous ne voulez pas avoir à faire cela du côté du serveur, n'est-ce pas ? Je suppose que le meilleur moyen serait de les transformer tous en espaces normaux (juste au cas où certains séparent deux mots), mais je ne suis pas sûr de savoir comment le faire avec ckeditor spécifiquement.

62voto

Tapper Points 533

Après quelques recherches, je pourrais faire la lumière sur ce problème - malheureusement, il n'existe pas de solution toute faite.

Dans CKEditor, un espace sans rupture peut se produire de quatre manières différentes (Quelqu'un en sait plus ?) :

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

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

    config.tabSpaces = 0;
  3. Conversion des espaces doubles en ESPACE+NBSP. Il s'agit d'un comportement du navigateur et il ne sera donc pas corrigé par l'équipe de CKEditor. . Il pourrait être corrigé par le serveur ou par un javascript onunload côté client. Peut-être que ce php est un début :

    preg_replace('/\s \s/ig', ' ', $text);
  4. Par copier-coller. Si vous collez un Espace sans coupure UTF-8 ou des doubles espaces, CKEditor les convertira automatiquement. La seule solution que je vois ici est de faire une regex comme ci-dessus. config.forcePasteAsPlainText = true; n'aide pas.

Résumé : Pour se débarrasser de tous les espaces sans coupure, vous devez écrire une fonction supplémentaire qui nettoie les entrées de l'utilisateur.

Les commentaires et autres suggestions sont très appréciés ! (J'utilise ckeditor 3.6.4)

11voto

gabriel Points 129

Il y a une autre façon dont un caractère d'espace non cassant peut se produire. En saisissant simplement un espace à la fin d'une phrase.

CKEditor échappe les entités HTML de base ainsi que 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 à l'expression nbsp gt lt amp ' " et d'autres caractères latins et grecs.

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

10voto

Deyvid. Points 201

Essayez :

config.basicEntities = false ;

pour moi a réglé le problème.

2 votes

Voir aussi mon commentaire sur basicEntities=false laissant passer du HTML arbitraire sur la réponse de @gabriel.

2 votes

Je crois que sa réponse allait droit au but, et que cette seule ligne a résolu le problème sans distractions inutiles

4voto

kampageddon Points 1269

En config.js :

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

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

2voto

joso Points 21

J'ai remarqué que certaines opérations d'édition de texte, comme la suppression d'un caractère (en appuyant sur le bouton Retour arrière) divisent le nœud de texte édité en deux. Le fait d'appuyer sur la barre d'espacement à la fin d'un tel nœud de texte nouvellement créé donne toujours lieu à &nbsp; au lieu de l'espace normal. J'appelle normalize() http://www.w3schools.com/jsref/met_node_normalize.asp à l'élément modifié 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();
        }
    });
 });

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X