Tinymce问题 - 额外段落

时间:2011-03-06 16:17:56

标签: tinymce

我试图将TinyMCE用作网络表单的一部分。集成工作正常,但是一旦提交表单,当然会验证数据。

如果验证评估为false,例如某些其他输入尚未填写,那么我当然不希望用户重新输入所有数据。所以我将Tinymce内容传递回重新加载的视图。

出现以下问题:

Tinymce Textarea的内容:测试

重新加载后Tinymce中的内容:<p>test</p>

每次都会添加一个额外的段落作为包装。

我希望Tinymce处理输入,就像它被插入到html视图中一样,这样纯文本视图就可以了,并且不会插入额外的段落。

我怎样才能做到这一点?


感谢您的回复。这只是一个示例输入,我肯定需要一个RTE,因为我正在构建一些自定义的CMS功能。我现在使用html_entity_decode(),html来自数据库,是的,我确实过滤了用户输入(基本上是CI,但我自己测试了XSS,只是为了确保......)。我不确定我是否以最优雅的方式做到这一点......但以下似乎对我来说很好:

JS Part:

<script type="text/javascript" src="<?php echo base_url();?>tinymce/jscripts/tiny_mce/tiny_mce.js"></script>


<script type="text/javascript">

$(document).ready(function(){

    tinyMCE.init({
        theme : "advanced",
        mode : "textareas",
        theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect,fontselect,fontsizeselect",
        theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
        theme_advanced_toolbar_location : "top",
        theme_advanced_toolbar_align : "left",
        entity_encoding : "raw",
        content_css : "<?php echo base_url();?>xcss/standard_tinymce.css",
    });

});

</script>

生成表单textarea(CI方式):

echo form_textarea('content', html_entity_decode($content));

多数民众赞成。

输入如:

<p><strong>test</strong></p><p>bla bla bla</p>

如果它存储在$ content中,现在将以如下方式显示:

测试

bla bla bla


如果您提交表单,那么后期数据将再次等于$ content。这正是你应该考虑检查注射或XSS攻击的后期数据的点,所以请不要以同样的方式去做,除非你跟踪接下来发生的事情......我的解决方案可能不是很安全所有情况,在我的情况下,这是好的,我认为,但如果有人知道更好,我肯定愿意更多地了解这一点;)

3 个答案:

答案 0 :(得分:3)

您可以通过指定

特别告诉TinyMCE不要将您的内容包装到根标签中
forced_root_block : false

在您的TinyMCE初始化选项中。

但不建议出于各种原因,请阅读常见问题解答中的此条目: http://tinymce.moxiecode.com/wiki.php/TinyMCE_FAQ#TinyMCE_produce_BR_elements_on_enter.2Freturn_instead_of_P_elements.3F

答案 1 :(得分:2)

非常简单。将此添加到tinymce init选项

 force_p_newlines : false

答案 2 :(得分:1)

这是不可能的,因为tinymce(以及我所知道的所有其他rtes)需要将文本包装到像p-tags或div这样的块元素中。这是必要的,以便能够设置该文本的样式(rte的主要功能之一)。 如果你不需要那些简单的表单输入,你可以考虑不使用tinymce编辑器。