php处理csv乱码问题

csv是comma separter value的缩写,其档案类型是「逗号分格」,用来存储一些地址薄不错,依计算机原来的设定,如果直接点选该档案,计算机将以EXCEL的模式开启该档案.但这样做的后果是出现中文乱码,因为csv档如果以EXCEL开启,由于计算机档案数据转换的原因,会将其CRC之数值改做科学记号方式储存,而造成档案中的 CRC值发生错误.后果很严重...不过你可以用记事本或者用word来打开它,这样打开是没有乱码的,但那些排版就乱七八糟了...看得很不爽...
      究其根本,就是csv不能打开utf-8编码的文档,而记事本和word则可以...
      而用PHP来编写支持多国语言网页的时候,数据交换时用utf-8会很方便,但这样一来就跟cvs冲突了
     
先参考一个从网上找来的例子:

<?php
$T_text = '要输出的CSV文件';

header('Cache-control: private');
header('Content-Disposition: attachment; filename=test.csv');
//如果mb_convert_encoding函数存在则用此函数来转编码,前提是需要安装mbstring包
if(function_exists('mb_convert_encoding')){
    header('Content-type: text/csv; charset=UTF-16LE');
    echo(chr(255).chr(254));
    echo(mb_convert_encoding($T_text,"UTF-16LE","UTF-8"));
}
//如果iconv函数存在则用此函数来转编码
elseif(function_exists('iconv')){
    header('Content-type: text/csv');
     echo(chr(255).chr(254));
    echo(iconv("UTF-8","UTF-16LE",$T_text));
}
//直接从utf-8转,这个貌似不灵...
else{
    header('Content-type: text/csv; charset=UTF-8');
    echo(chr(239).chr(187).chr(191));
    echo($T_text);
}
?>
例子上完了,但这样并不会将我的网页转换乱码成功,为什么我不知道,但我从中得到了启发

下面来两个函数,expChangeCode是导出时将utf-8格式编码转换成cp936,cp936是gbk的另一种说法.而impChangeCode则是导入时将cp936格式编码转换成utf-8,而上面例子上的chr(255).chr(254)则是给文档加一个bom(貌似微软文档专用,靠..)在下面两个函数中则不使用了,因为加上会造成中文字体消失.我也就是因为这个东东搞到半死...
function expChangeCode($str)
{
        $str = mb_convert_encoding($str,"CP936","UTF-8");
        return $str;
}

function impChangeCode($str)
{
        $str = mb_convert_encoding($str,"UTF-8","CP936");
        return $str;
}
用的时候也很简单,只要echo expChangeCode($str)就可以将没有乱码的csv格式的文档输出来了,输入因为程序不同,自己去用例子测试了...

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值