CodeIgniter框架如何轻松实现UEditor富文本编辑器集成?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1251个文字,预计阅读时间需要6分钟。
UEditor在CodeIgniter中可用,但默认配置下可能报404或上传失败——根本原因并非PHP版本或框架版本问题,而是路径映射和请求路由未对齐。
UEditor 前端 JS 加载失败:UEDITOR_HOME_URL 必须是绝对路径
常见现象是页面空白、控制台报 GET /ueditor/ueditor.all.js 404 或 Uncaught ReferenceError: UE is not defined。这不是 JS 文件没放对,而是 ueditor.config.js 里 UEDITOR_HOME_URL 没设成可访问的 URL 路径。
-
UEDITOR_HOME_URL的值必须以/开头,比如"/static/vendor/ueditor/",不能写相对路径如"ueditor/"或"./ueditor/" - 这个路径要和你实际部署位置一致:如果把 ueditor 放在
my_project/static/vendor/ueditor/,那它对外可访问的 URL 就是http://localhost/my_project/static/vendor/ueditor/,所以UEDITOR_HOME_URL就得填"/static/vendor/ueditor/" - 别信“自动推导”逻辑,
getUEBasePath()在 CI 环境下基本不可靠,直接硬编码更稳 - 确保
base_url()输出的域名+路径能拼出完整资源地址,例如:<script src="= base_url('static/vendor/ueditor/ueditor.all.js') ?>"></script>和UEDITOR_HOME_URL必须指向同一级目录
图片上传 500 或返回空 JSON:serverUrl 指向的 PHP 脚本没被 CI 路由接管
UEditor 默认调用 php/controller.php,但 CodeIgniter 不允许直接访问 php/ 目录下的 PHP 文件(尤其开启 index_page 重写后),直接访问会 403 或 404;即使能访问,也绕过了 CI 的环境初始化(如数据库、辅助函数、安全过滤)。
- 不要让前端直接请求
/static/vendor/ueditor/php/controller.php,这是最常踩的坑 - 正确做法是新建一个 CI 控制器,比如
Ueditor_controller.php,在其中加载 UEditor 提供的Uploader.class.php,并封装上传逻辑 -
serverUrl应设为 CI 的合法路由,例如"/index.php/ueditor/upload"(关闭重写时)或"/ueditor/upload"(启用重写且配置了 .htaccess 后) - 上传脚本里不能直接用
$_FILES或file_get_contents("php://input"),必须通过 CI 的$this->upload类或手动校验$_FILES+ MIME 类型 + 文件名安全处理
上传后图片路径错乱或显示为 http://.../ueditor/php/upload/image/...
这是 config.json 和后端实际保存路径不一致导致的。UEditor 前端拼接预览 URL 时,只认 imagePathFormat 里的占位符,但它不会自动帮你补全域名或 base_url。
-
imagePathFormat只控制“返回给前端的 URL 路径”,不是“服务器保存路径”。例如填"/uploads/ueditor/{yyyy}{mm}{dd}/{time}{rand:6}.jpg",意味着前端收到的图片 URL 是http://yourdomain.com/uploads/ueditor/20260420/123456789.jpg - 后端保存文件时,必须把
"/uploads/ueditor/..."映射到真实磁盘路径,比如FCPATH . 'uploads/ueditor/',否则文件写到错地方,前端自然 404 - CI 的
FCPATH指向项目根目录(含 application/),而BASEPATH指向 system/ 目录,别混淆 - 上传成功后返回的 JSON 必须包含
url字段,且值是完整可访问 URL(建议用base_url($saved_path)拼),不能只返回相对路径
中文乱码、上传文件名损坏、ERROR_TYPE_NOT_ALLOWED
UEditor 的 PHP 后端默认用 iconv('utf-8', 'gb2312', $filename) 处理中文名,但在 UTF-8 环境下极易崩。CI 本身是 UTF-8 友好的,但 UEditor 的老代码没跟上。
- 删掉所有
iconv调用,改用mb_convert_encoding($filename, 'UTF-8', 'UTF-8')或直接信任原始$_FILES['upfile']['name'](前提是前端没做额外编码) -
Uploader.class.php中的$stateMap错误提示是 GBK 编码的,直接json_encode()会乱码,必须统一转 UTF-8,例如:array_map(function($v) { return mb_convert_encoding($v, 'UTF-8', 'GBK'); }, $this->stateMap) - 检查
allowFiles配置是否包含小写扩展名(".jpg"),而用户上传的是大写(".JPG"),CI 默认不忽略大小写,需在判断前统一转小写 - 别忽略
max_file_size和 PHP 的upload_max_filesize、post_max_size限制,三者要匹配,否则上传中途静默失败
真正卡住人的从来不是“怎么加编辑器”,而是路径映射和字符编码这两层薄薄的纸——捅破之前全是 404 和乱码,捅破之后,UEditor 在 CI 里跑得比原生 PHP 还稳。
本文共计1251个文字,预计阅读时间需要6分钟。
UEditor在CodeIgniter中可用,但默认配置下可能报404或上传失败——根本原因并非PHP版本或框架版本问题,而是路径映射和请求路由未对齐。
UEditor 前端 JS 加载失败:UEDITOR_HOME_URL 必须是绝对路径
常见现象是页面空白、控制台报 GET /ueditor/ueditor.all.js 404 或 Uncaught ReferenceError: UE is not defined。这不是 JS 文件没放对,而是 ueditor.config.js 里 UEDITOR_HOME_URL 没设成可访问的 URL 路径。
-
UEDITOR_HOME_URL的值必须以/开头,比如"/static/vendor/ueditor/",不能写相对路径如"ueditor/"或"./ueditor/" - 这个路径要和你实际部署位置一致:如果把 ueditor 放在
my_project/static/vendor/ueditor/,那它对外可访问的 URL 就是http://localhost/my_project/static/vendor/ueditor/,所以UEDITOR_HOME_URL就得填"/static/vendor/ueditor/" - 别信“自动推导”逻辑,
getUEBasePath()在 CI 环境下基本不可靠,直接硬编码更稳 - 确保
base_url()输出的域名+路径能拼出完整资源地址,例如:<script src="= base_url('static/vendor/ueditor/ueditor.all.js') ?>"></script>和UEDITOR_HOME_URL必须指向同一级目录
图片上传 500 或返回空 JSON:serverUrl 指向的 PHP 脚本没被 CI 路由接管
UEditor 默认调用 php/controller.php,但 CodeIgniter 不允许直接访问 php/ 目录下的 PHP 文件(尤其开启 index_page 重写后),直接访问会 403 或 404;即使能访问,也绕过了 CI 的环境初始化(如数据库、辅助函数、安全过滤)。
- 不要让前端直接请求
/static/vendor/ueditor/php/controller.php,这是最常踩的坑 - 正确做法是新建一个 CI 控制器,比如
Ueditor_controller.php,在其中加载 UEditor 提供的Uploader.class.php,并封装上传逻辑 -
serverUrl应设为 CI 的合法路由,例如"/index.php/ueditor/upload"(关闭重写时)或"/ueditor/upload"(启用重写且配置了 .htaccess 后) - 上传脚本里不能直接用
$_FILES或file_get_contents("php://input"),必须通过 CI 的$this->upload类或手动校验$_FILES+ MIME 类型 + 文件名安全处理
上传后图片路径错乱或显示为 http://.../ueditor/php/upload/image/...
这是 config.json 和后端实际保存路径不一致导致的。UEditor 前端拼接预览 URL 时,只认 imagePathFormat 里的占位符,但它不会自动帮你补全域名或 base_url。
-
imagePathFormat只控制“返回给前端的 URL 路径”,不是“服务器保存路径”。例如填"/uploads/ueditor/{yyyy}{mm}{dd}/{time}{rand:6}.jpg",意味着前端收到的图片 URL 是http://yourdomain.com/uploads/ueditor/20260420/123456789.jpg - 后端保存文件时,必须把
"/uploads/ueditor/..."映射到真实磁盘路径,比如FCPATH . 'uploads/ueditor/',否则文件写到错地方,前端自然 404 - CI 的
FCPATH指向项目根目录(含 application/),而BASEPATH指向 system/ 目录,别混淆 - 上传成功后返回的 JSON 必须包含
url字段,且值是完整可访问 URL(建议用base_url($saved_path)拼),不能只返回相对路径
中文乱码、上传文件名损坏、ERROR_TYPE_NOT_ALLOWED
UEditor 的 PHP 后端默认用 iconv('utf-8', 'gb2312', $filename) 处理中文名,但在 UTF-8 环境下极易崩。CI 本身是 UTF-8 友好的,但 UEditor 的老代码没跟上。
- 删掉所有
iconv调用,改用mb_convert_encoding($filename, 'UTF-8', 'UTF-8')或直接信任原始$_FILES['upfile']['name'](前提是前端没做额外编码) -
Uploader.class.php中的$stateMap错误提示是 GBK 编码的,直接json_encode()会乱码,必须统一转 UTF-8,例如:array_map(function($v) { return mb_convert_encoding($v, 'UTF-8', 'GBK'); }, $this->stateMap) - 检查
allowFiles配置是否包含小写扩展名(".jpg"),而用户上传的是大写(".JPG"),CI 默认不忽略大小写,需在判断前统一转小写 - 别忽略
max_file_size和 PHP 的upload_max_filesize、post_max_size限制,三者要匹配,否则上传中途静默失败
真正卡住人的从来不是“怎么加编辑器”,而是路径映射和字符编码这两层薄薄的纸——捅破之前全是 404 和乱码,捅破之后,UEditor 在 CI 里跑得比原生 PHP 还稳。

