TinyMCE编辑器无法显示数据库文本的问题求助
解决TinyMCE编辑器在编辑页面无法显示数据库文本的问题
问题根源分析
- 变量名不匹配:你使用
setContent时报错$articleText未定义,是因为$articleText仅存在于发布文章的模型方法中,编辑视图里控制器传递的是$singlePost数组(包含titre、message等字段),二者变量名不一致。 - HTML转义未处理:发布文章时用
htmlspecialchars($data['Subject'], ENT_QUOTES)对内容进行了转义,数据库中存储的是转义后的字符(比如<变成<),直接赋值给TinyMCE会显示原始转义代码而非正常内容。 - TinyMCE初始化逻辑错误:未正确将数据库查询到的内容传递给编辑器。
具体解决方案
方案一:直接在textarea标签中输出内容(最简单)
在edit_post.php视图里,将textarea替换为以下代码:
<textarea id="post-content" name="Subject"> <?php // 解码转义的HTML字符,确保内容正常显示 echo htmlspecialchars_decode($singlePost['message']); ?> </textarea> <script> tinymce.init({ selector: '#post-content', // 其他TinyMCE配置项... }); </script>
TinyMCE会自动读取textarea中的初始内容,无需额外调用setContent。
方案二:使用setContent方法初始化内容
如果需要通过JS动态设置内容,确保在编辑器初始化完成后调用setContent,同时处理字符转义避免JS语法错误:
<textarea id="post-content" name="Subject"></textarea> <script> tinymce.init({ selector: '#post-content', setup: function(editor) { editor.on('init', function() { // 用addslashes处理引号,避免JS字符串解析错误,同时解码HTML转义 this.setContent("<?php echo addslashes(htmlspecialchars_decode($singlePost['message'])); ?>"); }); }, // 其他TinyMCE配置项... }); </script>
额外检查项
- 确认视图中能正常获取
$singlePost数据:在视图开头添加var_dump($singlePost);,检查是否包含message字段及对应内容。 - 确保TinyMCE的初始化脚本在textarea标签之后加载,或者包裹在
DOMContentLoaded事件中:
document.addEventListener('DOMContentLoaded', function() { tinymce.init({ // 配置项... }); });
内容的提问来源于stack exchange,提问作者Alexis P.
相关产品推荐
相关产品推荐

