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

时间:2010-05-17 16:59:47

标签: html formatting ckeditor wysiwyg

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

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

我偶然发现了一张CKEditor开发票,Preserve formatting of ProtectedSource elements,暗示了一个曾经存在过一次的设置,这正是我所追求的。我只是想知道在源模式下编辑时如何完全关闭所有自动格式化。

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

我了解了protectedSource设置,所以我想,也许我可以使用它并在我的所有HTML之前和之后创建一个HTML注释标记,然后推送一个正则表达式查找注释标记到protectedSource数组,但即便如此(信不信由你)也行不通。

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

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

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

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

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

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

5 个答案:

答案 0 :(得分:5)

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

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

$content = str_replace(array('<!-- src -->','<!-- end src -->'),array('<protected>','</protected>'),$content);

保存结果内容之前:

$content = str_replace(array('<protected>','</protected>'),array('<!-- src -->','<!-- end src -->'),$content);

在CKEditor配置中:

protectedSource:[/<protected>[\s\S]*<\/protected>/g]

希望有所帮助!

答案 1 :(得分:5)

我想在源代码中保留换行符,protectedSource功能适用于此。我将此添加到config.js

config.protectedSource = [/\r|\n/g];

答案 2 :(得分:2)

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>

答案 3 :(得分:1)

我通过简单地围绕编辑表单页面的后端输出以$ _GET变量为条件来解决这个问题 - 当您单击“专家模式”时,它会加载一个普通的textarea而不是ckeditor系统。您对ckeditor对象的调用将根据您的设置而有所不同。 (我有一个调用/构建编辑器对象的自定义类)

                <div id="postdivrich" class="postarea">
<?php
if( isset( $_GET['expert'] ) )
{
    print "<div style=\"text-align:right;\"><a href=\"/admin/ckeditor/edit.php?node={$nNode}\">Editor mode</a></div>\n";
    print "<textarea name=\"content\" style=\"height:400px;width:{$nEwidth}px;\">{$aDoc['content']}</textarea>\n";
}
else
{
    print "<div style=\"text-align:right;\"><a href=\"/admin/ckeditor/edit.php?node={$nNode}&expert=true\">Expert mode</a></div>\n";
    require_once( 'admin/editor.class.php' );
    $aDoc['content'] = str_replace( "\r", '', str_replace( "\n", '', nl2br( $aDoc['content'] ) ) );
    $oEditor = new setEditor( $aDoc['content'], $nEwidth, "400", 'content' );
    $oEditor->ShowEditor();
}
?>
                </div>

答案 4 :(得分:0)

this是否有帮助?基本上你可以关闭添加javascript的选项,它看起来像。