thinkphp使用auto_charset 进行处理mssql中文转码问题


(1)thinkphp mssql中文乱码


(2)auto_charset()


(3)参考: http://www.lhcom.cn/html/blog/7/6010.htm (ThinkPHP从Mssql中查询中文乱码解决

项目的各环节编码如下:
 
1.因为ThinkPHP默认为UTF-8
 
2.ThinkPHP的模板文件使用的编码也是UTF-8
 
3.但smsql数据库是简体中文版,存储的是GB2312编码
 
根据这些可以分析出乱码是因为编码不一致导致的。现在就是要将从数据库中取出的结果从GB2312转为UTF-8即可。
 
查询了TP的手册发现其有个内置的函数auto_charset。
 
在DbMssql类中的getAll方法中将代码:


$result[]   =   $row; 
改为:
$result[] = auto_charset($row, gb2312, utf8)




(4)参考 :http://www.thinkphp.cn/topic/4396.html


/**
*实现字符串编码格式实现转换 */
function auto_charset($fContents,$from='',$to=''){
if(empty($from)) $from = C('TEMPLATE_CHARSET');
if(empty($to)) $to = C('OUTPUT_CHARSET');
$from = strtoupper($from)=='UTF8'? 'utf-8':$from;
$to = strtoupper($to)=='UTF8'? 'utf-8':$to;
if( strtoupper($from) === strtoupper($to) || empty($fContents) || (is_scalar($fContents) && !is_string($fContents)) ){
//如果编码相同或者非字符串标量则不转换
return $fContents;
}
if(is_string($fContents) ) {
if(function_exists('mb_convert_encoding')){
return mb_convert_encoding ($fContents, $to, $from);
}elseif(function_exists('iconv')){
return iconv($from,$to,$fContents);
}else{
halt(L('_NO_AUTO_CHARSET_'));
return $fContents;
}
}
elseif(is_array($fContents)){
foreach ( $fContents as $key => $val ) {
$_key = auto_charset($key,$from,$to);
$fContents[$_key] = auto_charset($val,$from,$to);
if($key != $_key ) {
unset($fContents[$key]);
}
}
return $fContents;
}
elseif(is_object($fContents)) {
$vars = get_object_vars($fContents);
foreach($vars as $key=>$val) {
$fContents->$key = auto_charset($val,$from,$to);
}
return $fContents;
}
else{
//halt('系统不支持对'.gettype($fContents).'类型的编码转换!');
return $fContents;
}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值