修复 Infinite CMS 编辑文章时 HTML/PHP 代码导致排版错乱与 TinyMCE 异常的方案
在使用Infinite CMS 系统进行文章二次编辑时,遇到一个十分棘手的问题:当文章中包含 HTML 代码段、PHP 代码或 XML 标签时,打开编辑页面后,整个后台布局会瞬间错乱,甚至 TinyMCE 编辑器直接丢失或无法正常加载。这篇文章就这个问题做出修复。
Infinite CMS 是基于 CodeIgniter 框架开发的。在默认的编辑文章视图中,渲染文章内容的模板代码如下:
<textarea class="tinyMCE form-control" name="content"><?= $post->content; ?></textarea>
当使用 <?= $post->content; ?> 直接输出数据库中的原始文本时,如果文章内容里恰好包含了 HTML 标签(如 </div>)、<script> 脚本,甚至是关闭标签 </textarea>,浏览器在解析 DOM 结构时会优先将其识别为真正的页面节点。
这会导致 <textarea> 标签被提前闭合,剩余的代码直接“溢出”到后台页面中,破坏了原本的 HTML 布局,也使得 TinyMCE 无法按预期挂载并初始化该文本域。
修复步骤:
-
打开视图文件:
app/Views/admin/post/_form_update_post_left.php -
找到绑定的
<textarea>标签(通常在第 30-50 行附近)。 -
将原代码修改为使用 CodeIgniter 自带的
esc()安全转义函数。
找到代码:
<textarea class="tinyMCE form-control" name="content"><?= $post->content; ?></textarea>
修改成:
<textarea class="tinyMCE form-control" name="content"><?= esc($post->content, 'html'); ?></textarea>
保存,上传,然后再去后台编辑包含插入代码的文章查看效果即可,本方法原理上适用于该作者发布的Varient源码,但未测试。