tinymce 报“is not defined”错是因 script 未加载完就执行 init(),应将 cdn script 放 body 底部或加 defer,并确保 tinymce.init() 在 domcontentloaded 后调用。

怎么把 TinyMCE 加进 PHP 页面不报 tinymce is not defined
直接在 HTML 里用 <script></script> 引入 CDN,但没等 JS 加载完就调用 tinymce.init(),浏览器就会报这个错。关键不是 PHP 做了什么,而是前端资源加载时机没控住。
- 确保
<script src="https://cdn.tiny.cloud/1/no-api-key/tinymce/7/tinymce.min.js"></script>在底部,或加defer属性 -
tinymce.init()必须放在window.onload或 DOMContentLoaded 之后执行,别写在里 - PHP 只负责输出 HTML 框架,别试图用
echo "tinymce.init(...)"拼 JS —— 容易引号嵌套出错、XSS 风险高
CKEditor 5 在 PHP 表单提交后内容丢失?
常见于用 <textarea name="content"></textarea> 初始化 CKEditor 5,但提交时没同步编辑器内容回原 <textarea></textarea>,PHP 接收的还是空值或旧值。
- CKEditor 5 默认不自动绑定表单提交,必须手动监听
submit事件并调用editor.getData()写回<textarea></textarea> - 示例:
document.querySelector('form').addEventListener('submit', () => { document.getElementById('content').value = editor.getData(); }); - 如果用了 Laravel 或其他框架的 CSRF 字段,确保
<textarea></textarea>在<form></form>内且 name 匹配 PHP 的$_POST['content']
PHP 后端怎么安全接收富文本内容?
用户通过 TinyMCE 或 CKEditor 提交的 HTML,直接存库或 echo 出来,轻则样式错乱,重则 XSS 攻击。
- 别用
strip_tags()粗暴过滤 —— 它不识别自闭合标签、会漏掉onerror类属性 - 推荐用
HTMLPurifier库(需 Composer 安装),配置白名单:只允许p,strong,ul,li,img[src]等必要标签和属性 - 存库前 purify,展示前不再用
htmlspecialchars()—— 否则会被转成 zuojiankuohaophpcnp>,显示为纯文本
为什么 TinyMCE 的图片上传按钮点不动?
默认配置下,images_upload_url 指向一个 PHP 接口,但该接口没返回符合 TinyMCE 要求的 JSON 格式,或没处理 CORS,导致前端静默失败。
立即学习“PHP免费学习笔记(深入)”;
- PHP 接口必须返回类似
{"location": "https://yoursite.com/uploads/abc.jpg"},字段名必须是location,不能是url或path - 接口开头加
header('Access-Control-Allow-Origin: *');(上线时限制域名)和header('Content-Type: application/json'); - 检查 PHP 是否开了
file_uploads = On,临时目录可写,且$_FILES['file']['error'] === 0











