手机端CodeIgniter多语言乱码主因是UTF-8未全程统一:HTTP响应头(Content-Type含charset=UTF-8)、HTML文档(<meta charset="UTF-8">置于<head>最前)、数据库连接(config中char_set='utf8mb4')、PHP文件(UTF-8无BOM保存)四环节缺一不可。

手机端访问 CodeIgniter 多语言页面出现乱码,核心原因通常是字符编码未全程统一,尤其在 HTTP 响应头、HTML 文档声明、数据库连接、PHP 文件本身这四个环节中任一缺失 UTF-8 设置,就容易触发乱码。不是“手机特殊”,而是移动端浏览器(如 Safari、Chrome for iOS/Android)对编码声明更严格,容错更低。
确保 HTML 页面正确声明 UTF-8
视图文件(.php)顶部必须包含标准的 UTF-8 声明,且 放在 <head> 内最前位置:
-
<meta charset="UTF-8">(推荐,HTML5 写法) - 避免使用过时写法如
<meta http-equiv="Content-Type" content="text/html; charset=gbk"> - 若使用语言包(如
lang('welcome_message')),确保语言文件(application/language/zh_cn/welcome_lang.php等)本身是 UTF-8 编码保存(无 BOM),可用 Notepad++ 或 VS Code 检查并转换编码
配置 CodeIgniter 全局输出为 UTF-8
在 application/config/config.php 中确认以下两项已设置:
-
$config['charset'] = 'UTF-8';(CI 自动设置 header 和内部字符串处理) -
$config['language'] = 'zh_cn';(或对应语言目录名,确保路径存在且文件编码正确) - 同时检查
$config['enable_hooks']若启用钩子,确认无钩子意外修改了输出编码
数据库连接层保持 UTF-8
即使页面和 PHP 是 UTF-8,若数据库连接未指定字符集,中文查询/插入仍会出错:
- 在
application/config/database.php的数据库配置数组中加入:
'char_set' => 'utf8mb4',<br>'dbcollat' => 'utf8mb4_unicode_ci'
-
注意:用
utf8mb4而非utf8(MySQL 的utf8实为 utf8mb3,不支持 emoji 和部分生僻汉字) - 确保数据库、表、字段的 collation 均为
utf8mb4_unicode_ci(可通过 phpMyAdmin 或SHOW CREATE TABLE xxx验证)
服务端响应头与 PHP 文件编码一致
CI 默认通过 $config['charset'] 发送 Content-Type: text/html; charset=UTF-8,但需验证是否生效:
- 用手机浏览器打开页面 → 开发者工具(远程调试或抓包)→ 查看 Response Headers → 确认
Content-Type含charset=UTF-8 - 所有 PHP 文件(控制器、模型、语言文件)必须以 UTF-8 无 BOM 格式保存(BOM 会导致 header 已发送,进而破坏 charset 声明)
- 若使用 Nginx/Apache,检查服务器配置未强制覆盖 charset(如 Apache 的
AddDefaultCharset应设为Off或UTF-8)


















