CKEditor: Как остановить угловые скобки от преобразования в HTML-объекты - PullRequest
2 голосов
/ 08 сентября 2010

Наш сайт использует теги, такие как <# TAGNAME #>, но CKEditor преобразует <и> в <и>, что нарушает эти теги для использования в нашем программном обеспечении.

Я обнаружил этот параметр: config.protectedSource.push (/ <# [\ s \ S] * ##> / g);который, кажется, останавливает преобразование, если данные сохраняются из режима источника, но в режиме WYSIWYG я не могу найти способ остановить преобразование.Я перепробовал много вариантов в их API, но ни один из них, похоже, не помог, как я могу решить эту проблему?

Ответы [ 3 ]

3 голосов
/ 07 апреля 2011

Мы рассматривали возможность использования CKEDitor для редактирования шаблонов Smarty. Проблема, с которой мы столкнулись, заключалась в том, что она заменяла все угловые скобки и амперсанды внутри фигурных скобок, что все испортило. Это произошло в поиске Google, поэтому наше решение должно помочь всем, кто сталкивается с подобными проблемами.

CKEditor перестраивает HTML каждый раз, когда вы переключаетесь в режим «Код» и при сохранении, поэтому вам нужно добавить в HTML http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Data_Processor htmlFilter.

Это сработало для нас:

//replace Form_content with whatever your editor's id is.
  htmlParser = CKEDITOR.instances.Form_content.dataProcessor.htmlFilter;

            //We don't want HTML encoding on smarty tags
            //so we need to change things in curly brackets
            htmlParser.onText = function(text) {
                    //find all bits in curly brackets                       
                    var matches = text.match(/\{([^}]+)\}/g);

                    //go through each match and replace the encoded characters
                    if (matches!=null) {
                        for (match in matches) {    

                            var replacedString=matches[match];
                            replacedString = matches[match].replace(/&gt;/g,'>');
                            replacedString = replacedString.replace(/&lt;/g,'<');
                            replacedString = replacedString.replace(/&amp;/g,'&'); 

                            text = text.replace(matches[match],replacedString);
                            }
                    }

                    return text;

            }

Функция onText обрабатывает все биты, которых нет в тегах или комментариях.

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

1 голос
/ 21 мая 2012
editor.on( 'mode', function(ev) {
      if ( ev.editor.mode == 'source' ) {
                        var str=ev.editor.getData();
         str=str.replace(/&amp;/g, "&").replace(/&gt;/g, ">").replace(/&lt;/g, "<").replace(/&quot;/g, "\"");
         ev.editor.textarea.setValue(str);
      }
});

http://cksource.com/forums/viewtopic.php?f=11&t=20647&start=10

0 голосов
/ 08 сентября 2010

Если вы введете <или> в любом редакторе WYSIWYG, они будут преобразованы в свои объекты HTML в исходном режиме.

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