CKEditor caractères indésirables

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  .

36
demandé sur Vito Gentile 2012-03-16 21:13:09

10 réponses

Après quelques recherches, je pourrais faire la lumière sur cette question-malheureusement, il n'y a pas de solution prête à l'emploi.

Dans le CKEditor, il y a quatre façons de créer un espace sans interruption (quelqu'un en sait plus?):

  1. Remplissage Automatique de 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 double espaces à L'espace + NBSP. Il s'agit d'un comportement de navigateur et ne sera donc pas corrigé par L'équipe de CKEditor. Il pourrait être corrigé côté serveur ou par un onunload javascript côté client. Peut-être que ce php est un début:

    preg_replace('/\s \s/ig', ' ', $text);
    
  4. Par copier et coller. Si vous collez un UTF-8 no-break space {[14] } ou des espaces doubles CKEditor le convertira automatiquement. La seule solution que je vois ici est de faire une expression rationnelle comme ci-dessus. config.forcePasteAsPlainText = true; n'aide pas.

Résumé: pour se débarrasser de tous espaces sans interruption vous devez écrire une fonction supplémentaire qui nettoie l'entrée de l'utilisateur.

les Commentaires et autres suggestions sont grandement appréciés! (J'utilise ckeditor 3.6.4)

49
répondu Tapper 2016-12-12 16:19:39

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

CKEditor échappe aux entités HTML de base ainsi qu'aux 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 latin et grec caractère.

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

9
répondu gabriel 2013-05-09 18:10:40

Essayez:

Config.basicEntities = false;

Pour moi fixé le problème.

9
répondu Deyvid. 2014-10-02 09:24:15

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
répondu kampageddon 2015-01-22 09:17:35

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. Frapper la barre D'espace à la fin de ce nœud de texte nouvellement créé entraîne toujours &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();
        }
    });
 });
2
répondu joso 2014-12-04 13:44:05

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" le <p>&nbsp;</p> sont ajoutés, mais si j'ai changé la règle css à align="center" j'ai pu modifier les paragraphes et ils n'ont pas été ajoutées à nouveau.

0
répondu Victor Priceputu 2014-02-10 15:25:04

J'avais déjà dû jouer avec config.js, donc pour réparer '?'apparaître dans safari j'ai fini avec 3 lignes dans config.js

config.fillEmptyBlocks = function (element) {
return true; // DON'T DO ANYTHING!!!!!};
config.entities = false;
config.basicEntities = false;
0
répondu pat capozzi 2016-04-11 20:30:12

C'est une mauvaise solution

config.basicEntities = false;
  • parce qu'il 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>
  • de plus, les blocs vides comme <p>&nbsp;</p> ne peuvent pas spécifier d'indentation dans le texte puisque le caractère &nbsp; sera supprimé (config.fillEmptyBlocks = true;)

C'est la bonne solution

$text = preg_replace("#([^>])&nbsp;#ui", "$1 ", $text);
  • c'est une fonction PHP qui remplace tous les caractères &nbsp; sur un espace, sauf ceux qui sont à 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
répondu user3833195 2018-05-11 23:44:57

Si vous utilisez PHP, vous pouvez utiliser ce qui suit:

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

Cela supprimera: "<p> &nbsp;</p>"

Profitez :)

Maxwell

-3
répondu Maxwell9rk 2012-09-25 08:43:06

Ajouter à votre config.js

config.enterMode = CKEDITOR.ENTER_BR,
-3
répondu xiltepin 2013-01-29 08:18:06