用户名: 密   码:
   飞诺网 加入收藏
飞诺网 网站开发 VBScript ASP Asp.net Jsp php XML CGI-Perl 搜索引擎 ajax web技术
PHP系列教程 PHP实例 php技术文档

您当前的位置:飞诺网 >> php >> php技术文档

(PHP)海量数据输出CSV文件时由于特殊字符引起的CSV文件格式异常的问题解决

www.diybl.com    时间 : 2008-05-15  作者:佚名   编辑:本站 点击:   [ 评论 ]

本文地址:http://blog.csdn.net/thefirstwind/archive/2008/05/09/2422715.aspx

很多人通过拼字符串,直接使用fwrite来写CSV文件,这样固然没有错,但是如果遇到允许引号和逗号出现的情况,恐怕就显得非常麻烦了。

例如:
$csvDate = "中文,日文,韩文,西班牙'',''文,阿拉伯文";
$srcDir = ''/workspace/CSVList'';
$srcFile = $srcDir.date("Ymd").".csv";
if(!is_dir($srcDir)){
    $fh = fopen($srcFile,''wb'');
    fwrite($fh,$csvDate);
    fclose($fh);
}

我们想要得CSV文件是这样的格式

中文 日文 韩文 西班牙'',''文 阿拉伯文  

但是由于,西班牙文中有单引号和逗号
实际上在Excel中是这样的
中文 日文 韩文 西班牙'' 阿拉伯文

解决方法一般来说就是使用转义符来进行赋值,不过如果遇到海量数据的情况下,这样的办法是不可取的。
下面推荐使用array_push和fputcsv相结合的方法来解决该问题。

这里通过程序来说明:



$srcDir = ''/workspace/UnLockList/'';
!is_dir($srcDir) ) && (mkdir($srcDir, 0777&& chmod($srcDir,0777)) ;
$srcFile = $srcDir . date("Ymd". ''.csv'';


$rs0 = GetCSVData($PRDBConn);  //UnLockTN_Request返回的是二维数组
$fh = fopen($srcFile, ''wb'');

if(count($rs0)){
        fputcsv(
$fh,split('','',"申請ID,機種名,EB-№,申請№,部品名,LockUser"));
        
foreach($rs0 as $line0 ){
                fputcsv(
$fh,$line0);
        }
}

fputcsv(
$fh,array());

fclose($fh);
chmod($srcFile,0666);

 function GetCSVData ($PRDBConn){

      $RETURN_ARRAY = array();
      //数据库连接
   .....
   .....

  $RS01 = 记录集;
      foreach ($RS01 AS $ROW01){
      $line = array();
         array_push($line,$ROW01["ID"]);
         array_push($line,$ROW01["NAME"]);
         array_push($line,$ROW01["NO"]);
         .......
         array_push($RETURN_ARRAY,$line);
       }

         return $RETURN_ARRAY; 
   }


如上程序所示,就可以解决大量数据输出成CSV文件中,出现特殊意义字符,导致输出CSV文件格式异常的问题了。

 

 

如果图片或页面不能正常显示请点击这里
php技术文档推荐文章

文章评论