You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用MeekroDB存储TinyMCE HTML被转义,如何存储原始HTML?

搞定MeekroDB存储TinyMCE原始HTML的问题

嘿,我来帮你捋清楚这个问题~首先得先搞懂MeekroDB各个占位符的真实作用,你遇到的情况大概率是对占位符的理解有点偏差,或者代码里藏了额外的转义操作:

先澄清MeekroDB占位符的真相

  • %s:这个占位符只会做SQL注入防护的转义(比如把单引号转成两个单引号),根本不会碰你的HTML标签!如果你看到数据库里的HTML被转成了<这种实体,那绝对不是MeekroDB干的,要么是你代码里手动加了htmlspecialchars()/htmlentities()这类函数,要么是TinyMCE本身的配置把HTML转成了实体。
  • %l:这个是字面量占位符,直接把内容塞到SQL语句里,完全不转义——这玩意儿非常危险,分分钟给你搞出SQL注入漏洞,而且你报错的原因大概率是HTML里有单引号/双引号,直接插入SQL导致语法错误,所以绝对别用它!

正确的处理步骤

1. 先排查代码里的额外转义

检查你接收POST数据后的代码,有没有把TinyMCE的内容用htmlspecialchars()处理过?比如这种:

// 错误示例!别这么干
$content = htmlspecialchars($_POST['tinymce_content']);

如果有,赶紧删掉这个调用,它会把<转成&lt;,导致存储的是转义后的内容,而不是原始HTML。

2. 用%s安全存储HTML

%s才是正确的选择,它既防注入,又不会破坏你的HTML标签。举个实际的代码例子:

// 正确的写法
$tinymce_content = $_POST['tinymce_content'];
DB::query("INSERT INTO your_table (content_column) VALUES (%s)", $tinymce_content);

这样存储到数据库里的就是原始的HTML标签,不会被转义。

3. 检查TinyMCE的配置

如果上面两步都没问题,但还是存了转义后的实体,那得看看TinyMCE的初始化配置。默认情况下,TinyMCE可能会把一些字符转成实体,你可以在初始化时加上这个配置:

tinymce.init({
  // 其他配置项...
  entity_encoding: 'raw' // 设置为'raw',让编辑器输出原始HTML,不转义实体
});

4. 读取时别多此一举

最后,从数据库读取内容输出到页面时,别再用htmlspecialchars()了,直接输出就行,这样浏览器才能解析成HTML:

// 正确输出
echo $row['content_column'];

// 错误输出!会把HTML转成文本显示
// echo htmlspecialchars($row['content_column']);

这样一套操作下来,就能完美存储和展示TinyMCE生成的原始HTML啦~


内容的提问来源于stack exchange,提问作者Alexandre Cristo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:44:40