TinyMCE编辑器中的换行符在预览时显示额外的行,而不是在代码中

TinyMCE编辑器中的换行符在预览时显示额外的行,而不是在代码中,tinymce,bbcode,rte,Tinymce,Bbcode,Rte,我将BBCode插件与TinyMCE一起使用,看到预览和HTML代码之间的换行符并不相同 编辑器窗口中有以下行: This is line one This is line three 第二行是空的。当我在HTML中查看此内容时,我会看到以下内容 This is line one This is line three 没有多余的空行 tinyMCE.init({ mode : "textareas", theme : "advanced", plugins : "b

我将BBCode插件与TinyMCE一起使用,看到预览和HTML代码之间的换行符并不相同

编辑器窗口中有以下行:

This is line one

This is line three
第二行是空的。当我在HTML中查看此内容时,我会看到以下内容

This is line one
This is line three
没有多余的空行

tinyMCE.init({
    mode : "textareas",
    theme : "advanced",
    plugins : "bbcode",
    entity_encoding : "raw",
    remove_linebreaks : false,
    force_p_newlines : false,
    force_br_newlines : true,
    forced_root_block : ''
});

我缺少什么?

您可能需要来输出HTML代码:

nl2br-插入HTML换行符 在字符串中的所有换行符之前

或者,您可以将
force\u p\u newlines
选项设置为
true


我已经测试过了,你是对的,但是这种行为只发生在BBCode插件上。我相信通过使用
tinyMCE.init
中的
preformatted:true
选项,您应该能够解决您的问题。

我已经在Firefox 3.5.7和Google Chrome 4.0.223.11上对其进行了测试

html:

可以使用如下简单的CSS(“bbcode.CSS”)删除段落之间的空格:

p {margin:0; padding: 0;}

从TinyMCE配置中,您可以选择换行符的beavhior

TinyMCE将强制BR元素换行,而不是插入段落


尝试在配置对象中添加

valid_elements: 'br'  //and any others that you want

我也有同样的问题。这是bbcode插件的解决方案:

forced_root_block : false,
remove_redundant_brs : false,
valid_elements: "br",
verify_html : false,
仅供参考——尽管围绕它的政治闹剧是使用
标记而不使用

标记的“正确做法”,但对我来说,问题是我在电子邮件中发送内容——在电子邮件中,我无法控制
标记上的CSS(除非我想在每个标记中添加内联CSS)。因此,
标签为终端用户添加了看起来像是双行距的内容。我在我的网站上添加了CSS来删除间距,内容看起来很好


因此,在使用了

标记之后,然后使用
“正确的方法”,我将再次使用

标记…

这是另一种方法。只需更改Enter键和Shift+Enter键的行为即可

ed.onKeyPress.add(
    function (ed, evt) {
            if(evt.shiftKey && evt.keyCode == 13) {
                tinyMCE.execCommand('mceInsertContent', false, '<br><br>');
                tinymce.dom.Event.cancel(evt);
                //alert('shift enter key');
                return;
            } 
            if(evt.keyCode == 13 && !evt.shiftKey) {
                tinyMCE.execCommand('mceInsertContent', false, '<br>');
                tinymce.dom.Event.cancel(evt);
                //alert('enter key');
                return;             
            }                
        });
ed.onKeyPress.add(
功能(ed、evt){
if(evt.shiftKey&&evt.keyCode==13){
tinyMCE.execCommand('mceInsertContent',false,

'); tinymce.dom.Event.cancel(evt); //警报(“shift-enter键”); 返回; } if(evt.keyCode==13&&!evt.shiftKey){ tinyMCE.execCommand('mceInsertContent',false,
'); tinymce.dom.Event.cancel(evt); //警报(“输入键”); 返回; } });
对于TinyMCE 4,我也有同样的问题,但对于我来说,使用此配置

mode: 'exact',
inline: true, 
add_unload_trigger: false, 
schema:"html5", 
invalid_elements: "span", 
extended_valid_elements : "span[!class]", 
paste_remove_styles: true,
forced_root_block : false, 
verify_html : false,
cleanup : true

不,这根本不是我所描述的问题。首先,内置BBCode预览器也会出现这种情况。而且我确实有一个断线。但我想要两个,正如我在编辑器中键入的:。强制新行为true没有效果。我将提供一个例子。请参阅原始帖子中的编辑。预格式化属性也没有影响:(我开始认为这可能是一个bug,甚至可能是出于设计!@Kordonme:是的,用PHP无法可靠地撤销这个效果。很抱歉,我想不出其他任何东西,我读过TinyMCE wiki和一些论坛帖子,但我没有想到解决方案……也许你应该试着在TinyMCE论坛上问这个问题?是的,我就是这么想的一开始不是。但是支持论坛有一个帖子,第一行是:“我们不可能为每个人免费提供支持,这个论坛是关闭发布的。”@Kordonme:这很悲哀。他们应该改为:“我们不可能为任何人免费提供支持,这个论坛是关闭发布的。”您是否考虑过切换到CKEditor()?这是我想要的正确输出,而不是预览。请查看示例链接并尝试我在帖子中所写的内容:-)好的,我们开始:a)打开链接“”,在编辑器中键入内容,按“提交”,得到“404页面未找到”b)打开链接“”,在编辑器中键入内容,单击“测试”-链接我的解决方案是针对b):警报窗口向我显示空行。嗨,安德拉斯。只是为了澄清;我没有否决你:-)第二,你提供的解决方案不起作用。我有一个断线。但是我在寻找一个空行。@andreas:我测试了它,它是有效的,但我认为OP是在询问如何在提交表单时保留空行。TinyMCE似乎在进行某种后处理。@Alix Axel:让我们将主题更改为“高级”->单击“HTML”--按钮->相同结果(空行)嗨!你差点让我在那里呆上一秒钟:去掉多余的东西。但它不起作用:(它实际上在做其他事情:原始HTML输出是什么样子的,如果第2行有空格,你会得到相同的结果吗?不,如果第2行有空格,我会得到我想要的结果:。但我不想要空格-只是一个空行!;-)我怀疑tinymce正在输出

,但是如果两个HTML标记之间有空格,一些web浏览器将只显示两个连续的换行符。因此我的测试…我错了。问题似乎在于,当从文本区域提取文本时(通过POST或getContent()),任何双换行符都会被web浏览器透明地转换为单换行符。我唯一能想到的解决办法就是破解TinyMCE,让它总是在任何新行之前放置一个空格。@Kordonme:你已经试过我的测试页了吗?
ed.onKeyPress.add(
    function (ed, evt) {
            if(evt.shiftKey && evt.keyCode == 13) {
                tinyMCE.execCommand('mceInsertContent', false, '<br><br>');
                tinymce.dom.Event.cancel(evt);
                //alert('shift enter key');
                return;
            } 
            if(evt.keyCode == 13 && !evt.shiftKey) {
                tinyMCE.execCommand('mceInsertContent', false, '<br>');
                tinymce.dom.Event.cancel(evt);
                //alert('enter key');
                return;             
            }                
        });
mode: 'exact',
inline: true, 
add_unload_trigger: false, 
schema:"html5", 
invalid_elements: "span", 
extended_valid_elements : "span[!class]", 
paste_remove_styles: true,
forced_root_block : false, 
verify_html : false,
cleanup : true