乱码解决办法
第一种 数据库中的数据乱码
问题重现
首先数据库连接工具使用的navicat
可以看到这里对数据库进行了utf8编码,即里面显示的数据编码是utf8
这里可以看到正常显示的文字编码格式就是utf8编码,乱码就不知道是什么最初未转码为utf8之前的编码格式了
测试乱码的编码格式
这里有一个测试乱码网站
http://www.mytju.com/classcode/tools/messyCodeRecover.asp
我们把乱码的字符串放上去检测
因为之前我们已经把所有的编码格式统一为utf8,所以现在测出来在windows-1252编码下是能够正常显示。
乱码处理
这里就采用哪个编码能够正常显示,就使用哪种编码格式
在查询数据库时候进行设置
mysql_query("SET NAMES 'UTF8'");
这样就固定了里面所有的字符编码为utf8,和navicat配置一致
public function codingConverter($sPendingCode)
{
$sOldStr = $sPendingCode;
$sNewStr = mb_convert_encoding($sPendingCode, 'WINDOWS-1252', 'utf8');
if (stripos($sNewStr, '?') === false) {
return $sNewStr;
} else {
return $sOldStr;
}
}
首先将所有的编码格式转化为windows-1252,如果之前的编码是utf8能够正常显示,那么转化为Windows1252则会损坏字符,变成????,这里就进行检测。
结论
针对于多个字符相互转换,且如果有的字符转换为utf8乱码,则采用把乱码的字符改为原有的编码格式,utf8字符保持不变。