我正在尝试使用 TinyMCE 作为网络表单的一部分。集成工作正常,但是一旦您提交表单,数据当然就会得到验证。
如果验证结果为 false,例如尚未填写其他一些输入,那么我当然不希望用户重新输入所有数据。所以我将 Tinymce 内容传递回重新加载的 View 。
出现以下问题:
Tinymce Textarea 中的内容:测试
重新加载后Tinymce中的内容:<p>test</p>
因此每次都会添加一个额外的段落作为包装。
我希望Tinymce对待输入,就像它被插入到html View 中一样,这样纯 TextView 就可以了,并且不会插入额外的段落。
我怎样才能实现这个目标?
<小时/>感谢您的回复。这只是一个示例输入,我确实需要 RTE,因为我正在构建一些定制的 CMS 功能。我现在使用 html_entity_decode() 让它工作,html 来自数据库,是的,我确实正确过滤了用户输入(基本上 CI 会这样做,但我自己测试了 XSS,只是为了确保......)。我不确定我是否以最优雅的方式这样做......但以下似乎对我来说效果很好:
JS 部分:
<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中,现在将在tinymce中以以下方式显示:
测试
啦啦啦啦
<小时/>如果您提交表单,那么后期数据将再次等于 $content。这正是您应该考虑检查注入(inject)或 XSS 攻击的发布数据的点,所以请不要以同样的方式执行此操作,除非您跟踪接下来发生的情况...我的解决方案可能不太安全在所有情况下,就我而言,这都很好,我认为,但如果有人更了解,我绝对愿意了解更多信息;)
最佳答案
您可以通过指定明确告诉 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
关于Tinymce 问题 - 额外段落,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5211687/