在源模式下查看时,如何在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保持不变。
答案 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的选项,它看起来像。