• PHP导出CSV UTF-8转GBK不乱码的解决办法


    折腾了几次 搜索了好久 终于找到办法

    /**
    * http://yige.org/php/
    * @ string 需要转换的文字
    * @ encoding 目标编码
    **/    
    function convert_encoding($string, $encoding = 'gbk'){
    	$is_utf8 =  preg_match('%^(?:[x09x0Ax0Dx20-x7E]| [xC2-xDF][x80-xBF]|  xE0[xA0-xBF][x80-xBF] | [xE1-xECxEExEF][x80-xBF]{2}    |  xED[x80-x9F][x80-xBF] |  xF0[x90-xBF][x80-xBF]{2}  | [xF1-xF3][x80-xBF]{3}  |  xF4[x80-x8F][x80-xBF]{2} )*$%xs', $string);
    	if($is_utf8 && $encoding == 'utf8'){
    		return $string;
    	}elseif($is_utf8){
    		return mb_convert_encoding($string, $encoding, "UTF-8");
    	}else{
    		return mb_convert_encoding($string, $encoding, 'gbk,gb2312,big5');
    	}
    }
    

      

    应用办法

    /**
     * 输出一个csv头,用于下载
     * @param string $filename, 输出的下载文件名
     * @return null
     */
    function csv_header_4_downloading($filename, $encode = 'UTF-8')
    {
    	header('Content-Encoding: ' . $encode);
    	header('Content-type: text/csv; charset=' . $encode);
    	header("Content-Disposition: attachment; filename={$filename}.csv");
    	if (strtolower($encode) == 'utf-8') echo "xEFxBBxBF"; // UTF-8 BOM
    }
    /**
        * 导出数据为excel表格
        *@param $data    一个二维数组,结构如同从数据库查出来的数组
        *@param $title   excel的第一行标题,一个数组,如果为空则没有标题
        *@param $filename 下载的文件名
        *@examlpe 
        $stu = M ('User');
        $arr = $stu -> select();
        exportexcel($arr,array('id','账户','密码','昵称'),'文件名!');
    */
    function export2excel($data=array(), $title=array(), $filename='report'){
    	ob_clean();
        csv_header_4_downloading($filename, 'gbk');
        //导出xls 开始
        if (!empty($title)){
    		
            foreach ($title as $k => &$v) {
    			$v = convert_encoding($v, 'gbk');
            }
            $title= implode("","", $title);
            echo ""$title"
    ";
        }
    
        if (!empty($data)){
            foreach($data as $key => &$val){
                foreach ($val as $ck => &$cv) {
    				$cv = str_replace(',', ',', $cv);
    				$cv = str_replace(""", "\"", $cv);
    				$cv = str_replace("
    ", "", $cv);
    				$cv = str_replace("
    ", "", $cv);
    				$cv = strip_tags($cv);
    				$cv = convert_encoding($cv, 'gbk');
                }
                $val = implode("","", $val);
    			echo ""$val"
    ";
            }
        }
    	exit();
    }
    

      

  • 相关阅读:
    html基础
    jenkins+ant+git+android搭建笔记
    appiumforandroid从零安装笔记(forWindows)
    使用enterTextInWebElement处理qq授权页报“网络异常,请稍后再试”的解决方法
    自动化日志测试计划
    robotium4.2简化通过id操作view啦
    在windows平台捕获iOS设备控制台日志
    android抓包笔记
    [Leetcode] Move Zeros
    [8.3] Magic Index
  • 原文地址:https://www.cnblogs.com/imbin/p/3493849.html
Copyright © 2020-2023  润新知