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
.
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?):
-
Remplissage Automatique de blocs vides. Cela peut être désactivé dans la configuration:
config.fillEmptyBlocks = false;
-
Insertion automatique en appuyant sur la touche TAB . Cela peut être désactivé dans la configuration:
config.tabSpaces = 0;
-
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);
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)
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
Essayez:
Config.basicEntities = false;
Pour moi fixé le problème.
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 )
;
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
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();
}
});
});
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> </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.
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;
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> </p>
ne peuvent pas spécifier d'indentation dans le texte puisque le caractère
sera supprimé (config.fillEmptyBlocks = true;)
C'est la bonne solution
$text = preg_replace("#([^>]) #ui", "$1 ", $text);
- c'est une fonction PHP qui remplace tous les caractères
sur un espace, sauf ceux qui sont à l'intérieur de la balise comme<p> </p>
- le code de fonction n'est pas le plus élégant, vous pouvez suggérer votre propre version.
Si vous utilisez PHP, vous pouvez utiliser ce qui suit:
preg_replace("/[\<]p[\>][\s]+ [\<][\/]p[\>]/" , " " , $pre_comment);
Cela supprimera: "<p> </p>"
Profitez :)
Maxwell
Ajouter à votre config.js
config.enterMode = CKEDITOR.ENTER_BR,