CKEditor нежелательных персонажей - PullRequest
39 голосов
/ 16 марта 2012

Как я могу отключить CKEditor, чтобы получать меня каждый раз  , когда я не хочу их? Я использую CKEditor с адаптером jQuery.

Я не хочу иметь теги  .

Ответы [ 10 ]

51 голосов
/ 20 июля 2012

После некоторых исследований я мог бы пролить свет на эту проблему - к сожалению, нет готового решения.

В CKEditor есть четыре способа, которыми пространство без перерывов можетпроисходит (кто-нибудь знает больше?):

  1. Автоматическое заполнение пустых блоков .Это можно отключить в конфигурации:

    config.fillEmptyBlocks = false;
    
  2. Автоматическая вставка при нажатии клавиши TAB .Это можно отключить в конфигурации:

    config.tabSpaces = 0;
    
  3. Преобразование двойных пробелов в SPACE + NBSP. Это поведение браузера и поэтому не будет исправлено командой CKEditor .Это может быть исправлено на стороне сервера или на стороне клиента при загрузке javascript.Может быть, этот PHP является началом:

    preg_replace('/\s \s/ig', ' ', $text);
    
  4. С помощью копирования и вставки.Если вы вставите UTF-8 без пробелов или двойные пробелы, CKEditor преобразует его автоматически.Единственное решение, которое я вижу здесь, это сделать регулярное выражение, как указано выше.config.forcePasteAsPlainText = true; не помогает.

Резюме: Чтобы избавиться от всех пробелов без перерывов, вам нужно написать дополнительную функцию, которая очищает ввод данных пользователем.

Комментарии и дальнейшие предложения приветствуются!(Я использую ckeditor 3.6.4)

9 голосов
/ 09 мая 2013

Есть еще один способ, которым может возникнуть символ пробела. Просто введя пробел в конце предложения.

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

8 голосов
/ 02 октября 2014

Попробуйте:

config.basicEntities = false;

для меня исправлена ​​проблема.

4 голосов
/ 22 января 2015

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 );

2 голосов
/ 04 декабря 2014

Я заметил, что некоторые операции редактирования текста, такие как удаление символа (нажатием кнопки Backspace) разбивают отредактированный текстовый узел на два. Нажатие клавиши пробела в конце такого вновь созданного текстового узла всегда приводит к &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();
        }
    });
 });
0 голосов
/ 12 мая 2018

Это плохое решение

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);
  • Это функция PHP, которая заменяет все символы &nbsp; в пробеле, кроме тех, которые находятся внутри тега, например <p>&nbsp;</p>
  • Код функции не самый элегантный, вы можете предложить свою собственную версию.
0 голосов
/ 11 апреля 2016

Мне уже пришлось поиграться с config.js, чтобы исправить '?'обнаруживаясь в сафари, я получил 3 строки в config.js

config.fillEmptyBlocks = function (element) {
return true; // DON'T DO ANYTHING!!!!!};
config.entities = false;
config.basicEntities = false;
0 голосов
/ 10 февраля 2014

У меня были такие же проблемы при создании некоторых таблиц.Я увидел, что если я создал таблицы с правилом css align="left", добавляются <p>&nbsp;</p>, но если я изменил правило css на align="center", я мог бы редактировать абзацы, и они не были добавлены снова.*

0 голосов
/ 29 января 2013

Добавьте это к вашему config.js

config.enterMode = CKEDITOR.ENTER_BR,
0 голосов
/ 25 сентября 2012

Если вы используете PHP, вы можете использовать следующее:

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

Это удалит: "<p> &nbsp;</p>"

Наслаждайтесь:)

Максвелл

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...