首页 > 后端开发 > php教程 > php导出非乱码非乱序 奇葩问题求大神挫进来帮帮小弟

php导出非乱码非乱序 奇葩问题求大神挫进来帮帮小弟

WBOY
发布: 2016-06-23 13:54:55
原创
842 人浏览过



上面第一个图是导出后的效果图,第二张是数据库实际数据,细心的哥们就发现导出的图后三位全部变为0,这神马情况啊

求大神指点
代码如下:

 <?phpdefine('NOROBOT', true);define('CURSCRIPT', 'charge');require_once './include/common.inc.php';header("Content-type:application/vnd.ms-excel;charset=utf-8");header("Content-Disposition:attachment;filename=充值卡.xls");$page = $page ?: 1; $results = array(); $condition = '';		  		 echo   "被充值手机号"."\t";  		 echo   "充值卡序列号"."\t";  		 echo   "充值金额"."\t"; 		 echo   "实充额度"."\t";				 echo   "充值时间"."\t";$query = $mysqli->multi_query('CALL UP_User_GetCardInfo("'.$condition.'","'.$page.'","900000")')  or die($mysqli->error);$query = $mysqli->store_result();		 while ($record = mysqli_fetch_array($query, MYSQLI_BOTH)){		$phone = $record['phone'];		$cardid = $record['cardid'];			$charge = $record['charge'];			$achieve = $record['achieve'];			$chgdate =  $record['useDate'];	 								echo   "\n"; 		echo   $phone."\t";		echo   $cardid."\t"; 		echo   $charge."\t"; 		echo   $achieve."\t"; 		echo   $chgdate."\t"; 				}if(is_object($query)) 	$query->free_result();$mysqli->next_result();   ?>
登录后复制


回复讨论(解决方案)

没人!

用另外一种方法也是一样的效果,代码如下:

 <?php//iconv("utf8","gb2312",$v)。数据库用的UTF8,导出csv时如不转换excel打开中文将显示乱码(文本正常)require_once './include/common.inc.php';function exportToCsv($csv_data, $filename = 'export.csv') {    $csv_terminated = "\n";    $csv_separator = ",";    $csv_enclosed = '"';    $csv_escaped = "\\";    // Gets the data from the database    $schema_insert = '';    $out = '';    // Format the data    foreach ($csv_data as $row)    {        $schema_insert = '';        $fields_cnt = count($row);        //printr($row);        $tmp_str = '';        foreach($row as $v)        {            $tmp_str .= $csv_enclosed.str_replace($csv_enclosed, $csv_escaped . $csv_enclosed, iconv("utf8","gb2312",$v)).$csv_enclosed.$csv_separator;        } // end for                $tmp_str = substr($tmp_str, 0, -1);        $schema_insert .= $tmp_str;        $out .= $schema_insert;        $out .= $csv_terminated;    } // end while    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");    header("Content-Length: " . strlen($out));    header("Content-type: text/x-csv;charset=utf-8");    header("Content-Disposition:filename=$filename");#header('Content-Disposition: attachment;filename="'.iconv('utf-8', "gb2312", $filename));    echo $out;}#$title = array("uid","username","company");#$title = $_SESSION["exp_title"];$title = array();$field = array();foreach ($_SESSION["exp_title"] as $key => $val){  $title[] = $key;  $field[] = $val;}#$query = $mysqli->query("select uid,username,phone from ccna_members limit 10") or die($mysqli->error);#$query = $mysqli->multi_query("select * from ccna_members limit 10")  or die($mysqli->error);$query = $mysqli->multi_query($_SESSION["exp_sql"])  or die($mysqli->error);$query = $mysqli->store_result();//$csv_data = array(array('uid', 'username'));//所有记录就存这啦$csv_data = array(array());//压入表头,将字段放到第一行for ($i=0; $i < count($field); $i++) {	  $csv_data[0][$i]= $field[$i];}while($row = mysqli_fetch_array($query,MYSQLI_BOTH)){	//array_push($csv_data, array($row[0],$row['username']));		$row_array = array();	for ($i=0; $i < count($title); $i++) {		#array_push($row_array,iconv("utf-8","gb2312",$row[$title[$i]]));		array_push($row_array,$row[$title[$i]]);	}	array_push($csv_data,$row_array);}exportToCsv($csv_data,$_SESSION["exp_filename"].".csv");?>
登录后复制

echo   $cardid."\t";
改为
echo   “‘$cardid\t";

echo   $cardid."\t";
改为
echo   “‘$cardid\t";


还是一样,不行。谢谢你的回答

怎么可能,你产生的就是文本文件,只不过后缀不同罢了


我加你扣扣可以吗?

怎么可能,你产生的就是文本文件,只不过后缀不同罢了



可以我改成echo   "$cardid\t";    还是不行,不知道为什么。

 "’$cardid\t"; 
有个单引号
是也在想:字太小可能看不清

 "’$cardid\t"; 
有个单引号
是也在想:字太小可能看不清



谢谢。 结贴给分

?成字符串就可以了。

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板