将数据插入tinymce的正确方法不会打印出来甚至使用htmlentities。请考虑以下代码
tinymce.init({
selector: 'div.editor',
theme: 'inlite',
plugins: 'image table link paste contextmenu textpattern autolink',
insert_toolbar: 'quickimage quicktable',
selection_toolbar: 'bold italic | quicklink h1 h2 h3 blockquote',
inline: true,
paste_data_images: true,
automatic_uploads: true,
init_instance_callback : function(ed) {
// ed.setContent("
Title
Content...
");var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
ed.setContent(xhttp.responseText);
}
};
xhttp.open("GET", "content.php", true);
xhttp.send();
},
content_css: [
'//www.tinymce.com/css/codepen.min.css'
]
});
而文件content.php应该只是打印html内容
$content = ''; // Fetch from database
print $content;
?>
在初始化tinymce时,请注意init_instance_callback中的函数。这是在tinymce初始化后调用的函数。现在,直接在编辑器中直接使用print,在init_instance_callback中进行一个ajax调用,并将其渲染到那里。我已经放置了一个示例评论行,只是为了帮助你一样。这也将负责安全验证(如果有脚本标签执行)。
同时在编辑器的同时将其保存到数据库中
var content = tinyMCE.get('editor').getContent();
然后你可以做一个ajax的post请求来保存数据到数据库。
现在为什么我使用ajax是很重要的。我尝试了很多其他方法,我可以直接打印它。但是,在编辑器初始化之前脚本标签可以运行,会导致安全漏洞。
我在这个例子中使用了div,但即使对于文本区也是一样的。也不要使用htmlentities,因为这将转义html内容,你想看到呈现在tinymce的内容,而不是转义的版本。