Rumah >pembangunan bahagian belakang >tutorial php >php导出非乱码非乱序 奇葩问题求大神挫进来帮帮小弟
上面第一个图是导出后的效果图,第二张是数据库实际数据,细心的哥们就发现导出的图后三位全部变为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";
怎么可能,你产生的就是文本文件,只不过后缀不同罢了
怎么可能,你产生的就是文本文件,只不过后缀不同罢了
"’$cardid\t";
有个单引号
是也在想:字太小可能看不清
"’$cardid\t";
有个单引号
是也在想:字太小可能看不清
?成字符串就可以了。