CodeIgniter3+MySQL项目移除/替换字符串特殊字符及forceUTF8 404解决
解决CodeIgniter 3中MySQL特殊字符(如Â)的展示问题及ForceUTF8库404错误
一、先修复ForceUTF8库导致的404错误
你遇到的404是因为CodeIgniter 3对带命名空间的第三方库加载逻辑不兼容,加上代码里的调用错误,修正步骤如下:
调整库文件结构
- 若原
Encoding.php文件带有namespace ForceUTF8;语句,直接删掉这行,将文件放在application/libraries/目录下。 - 不想删命名空间的话,就创建
application/libraries/ForceUTF8/目录,把Encoding.php移入该目录。
- 若原
修正控制器代码
删掉use \ForceUTF8\Encoding;语句,改用CI原生的库加载方式,同时修正变量调用错误(原代码使用了未定义的$data['body']):defined('BASEPATH') or exit('No direct script access allowed'); class Test extends MY_Controller { public function __construct() { parent::__construct(); // 无命名空间时加载'encoding',有命名空间时加载'forceutf8/encoding' $this->load->library('encoding'); } public function test1() { $str = "some rÂndom string"; $str = Encoding::toUTF8($str); echo '<pre>'.$str.'</pre>'; } }
二、处理特殊字符的几种实用方案
除了使用ForceUTF8库,还可以用原生PHP方法或从编码根源解决问题:
方案1:PHP原生函数直接转换
用iconv可以将特殊字符转换为最接近的字母数字,同时忽略无法转换的字符:
$str = "some rÂndom string"; // TRANSLIT替换近似字符,IGNORE忽略无法转换的内容 $clean_str = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $str); // 输出结果:some random string
如果只需要处理特定字符,用strtr批量替换更高效:
$replace_map = [ 'Â' => 'A', 'Ã' => 'A', 'Ä' => 'A', 'â' => 'a', // 按需添加其他特殊字符映射 ]; $clean_str = strtr($str, $replace_map);
方案2:从编码根源解决(推荐)
Â这类字符大多是编码不匹配导致的(比如数据库用latin1,页面用UTF-8,插入数据时编码未统一),从根源解决更彻底:
- 修改数据库字符集
将数据表的字符集改为utf8mb4,排序规则设为utf8mb4_unicode_ci。 - 配置CI数据库编码
在application/config/database.php中设置:$db['default']['char_set'] = 'utf8mb4'; $db['default']['dbcollat'] = 'utf8mb4_unicode_ci'; - 确保页面输出编码
在application/config/config.php中设置:
统一页面输出与数据库编码,就能从源头避免乱码产生。$config['charset'] = 'UTF-8';
内容的提问来源于stack exchange,提问作者dapidmini
相关产品推荐
相关产品推荐

