防止CKEditor在源模式下格式化代码

Lev*_*Lev 20 html formatting wysiwyg ckeditor

在源模式下查看时,如何在CKEditor中阻止任何自动格式化?

我喜欢直接编辑HTML源代码而不是使用WYSIWYG接口,但每当我编写新行或布局标签时我会如何缩进它们,当我切换到WYSIWYG模式然后再次返回源模式时,它都会被格式化.

我偶然发现了一张CKEditor开发票,保留了ProtectedSource元素的格式,这提到了一个曾经存在过一次的设置,这正是我所追求的.我只想知道在源模式下编辑时如何完全关闭所有自动格式化.

我提出了一个我认为万无一失的解决方案(虽然不是一个令人愉快的解决方案).

我了解了protectedSource设置,所以我想,也许我可以使用它并在我的所有HTML之前创建一个HTML注释标记,然后在它之后创建一个HTML注释标记然后推送一个正则表达式,将注释标记添加到protectedSource数组中,但即便如此(相信它或不)工作不起作用.

我已经在CKEditor之外的浏览器中直接尝试了我的表达并且它正在工作,但是CKEditor没有按预期保护代码(我怀疑这是一个涉及注释标记的错误,因为我可以让它与其他字符串一起使用).万一你想知道,这是我希望可以解决的问题,但不是:

config.protectedSource.push( /<!-- src -->[\s\S]*<!-- end src-->/gi );
Run Code Online (Sandbox Code Playgroud)

而我计划做的事情(因为似乎缺少一种在源模式下禁用格式化的设置)是将我的所有HTML嵌套在注释标签中,如下所示:

<!-- src -->
<div>some code that shouldn't be messed with (but is)</div>
<!-- end src -->
Run Code Online (Sandbox Code Playgroud)

我很想知道是否有人对这种情况有任何建议,或者知道我所描述的设置,或者即使有人可以告诉我为什么我无法protectedSource使用两个评论标签正常工作.

我真的认为它必须是一个bug,因为我可以让很多其他表达式工作正常,我甚至可以在单个注释标记区域内保护HTML,但我无法在两个不同的注释标记中获取HTML以保持不变.

Mic*_*kin 5

我的解决方案是在我的系统中使用注释,但在将页面内容提供给CKEditor之前,将它们转换为自定义HTML标记.然后,保存后,将它们转换回我的评论标签.

对于你的语法,在PHP中会是这样的.在将页面内容打印到textarea之前:

$content = str_replace(array('<!-- src -->','<!-- end src -->'),array('<protected>','</protected>'),$content);
Run Code Online (Sandbox Code Playgroud)

在保存结果内容之前:

$content = str_replace(array('<protected>','</protected>'),array('<!-- src -->','<!-- end src -->'),$content);
Run Code Online (Sandbox Code Playgroud)

在CKEditor配置中:

protectedSource:[/<protected>[\s\S]*<\/protected>/g]
Run Code Online (Sandbox Code Playgroud)

希望有所帮助!


小智 5

我想在源代码中保留换行符,因此该protectedSource功能很好用。我将此添加到我的config.js

config.protectedSource = [/\r|\n/g];
Run Code Online (Sandbox Code Playgroud)


Har*_*Das 5

config.allowedContent=true;会成功的

这是完整的 HTML 代码

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>CKEditor</title>
        <script src="http://cdn.ckeditor.com/4.5.10/standard/ckeditor.js"></script>
    </head>
    <body>
        <textarea name="editor1"></textarea>
        <script>
            CKEDITOR.config.allowedContent=true;
            CKEDITOR.replace( 'editor1' );
        </script>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)