CKEditor:如何阻止尖括号转换为HTML实体

时间:2010-09-08 14:09:45

标签: ckeditor

我们的网站正在使用<#TAGNAME#>等标签。但是CKEditor转换<和> to& lt和& gt打破这些标签以便在我们的软件中使用。

我发现了这个选项:config.protectedSource.push(/<#[\ s \ S] * ##> / g);如果数据从源模式保存,似乎停止转换,但在WYSIWYG模式下,我找不到停止转换的方法。我在他们的API中尝试了很多选项,但似乎没有任何帮助,我该如何解决这个问题呢?

3 个答案:

答案 0 :(得分:3)

正在考虑使用CKEDitor编辑Smarty模板。我们遇到的问题是它正在替换大括号内的所有尖括号和符号,这使得一切都搞砸了。这出现在谷歌搜索中,因此我们的解决方案可以帮助任何有类似问题的人。

每次切换到源模式和保存时,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(/>/g,'>');
                            replacedString = replacedString.replace(/&lt;/g,'<');
                            replacedString = replacedString.replace(/&amp;/g,'&'); 

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

                    return text;

            }

onText函数处理所有不在标签或注释中的位。

我想你可以通过改变上面的代码来做类似的事情 - 我已经把它保留了,因为我认为我们的问题和所需的解决方案非常相似。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

如果输入&lt;或者&gt;在任何WYSIWYG编辑器中,它们将以源模式转换为HTML实体。