0

在我的代码中,我需要在 CSV 导出中的 mysql 表中保留每个字段中的所有逗号...

为此,我对所有字段都使用了双引号。此代码在 Linux 系统中完美运行。在 Windows 中运行相同的代码时,双引号也显示在导出的 CSV 文件中。这是什么问题?谁能告诉我为什么会这样?

    function  arrayToCSV($array, $header_row = true, $col_sep = ",", $row_sep = "\n", $qut = '"',$pgeTyp ="")
    {
    /*col_sep =htmlentities($col_sep);
    $row_sep =htmlentities($row_sep);
    $qut =htmlentities($qut);*/
    if (!is_array($array) or !is_array($array[0])) return false;
    //Header row.
    if ($header_row)
    {
    foreach ($array[0] as $key => $val)
    {
    //Escaping quotes.
    $key = str_replace($qut, "$qut$qut", $key);
    $output .= $col_sep.$qut.$key.$qut;
    }
    $output = substr($output, 1)."\n".$row_sep;
    }
    //Data rows.
    foreach ($array as $key => $val)
    {
    $tmp = '';

    foreach ($val as $cell_key => $cell_val)
    {  
    if($pgeTyp!="twitter" && $pagTyp!="jigsaw" && $pgeTyp=="")
    $timeValue = @checkTimeStamp($cell_val);
    else  $timeValue = '';
    if($timeValue=="True")
    {
    $cell_val = str_replace($qut, "$qut$qut", convert_time_zone($cell_val,'d-M-y h:i:s'));
    }
    else
    {
    $cell_val = str_replace($qut, "$qut$qut", $cell_val);
    }

    $tmp .= $col_sep.$qut.$cell_val.$qut;
    }
    $output .= substr($tmp, 1).$row_sep;
    }
    return $output;
    }

函数调用是,

$dbResult1[] =array('url_twitter_userid' => $selecttwittermainFtch['url_twitter_userid'],'url_tweet_name' => "$url_tweet_name",'url_twitter_uname' => "$url_twitter_uname",'url_twitter_url' => $selecttwittermainFtch['url_twitter_url'],'url_twitter_location' => "$url_twitter_location",'url_twitter_followers' => $selecttwittermainFtch['url_twitter_followers'],'url_twitter_following' => $selecttwittermainFtch['url_twitter_following'],'url_modified_on' => $modifiedon);   
echo arrayToCSV($dbResult1, true, ", ", "\n",  '','twitter');                 
4

2 回答 2

1

试试这个:

function sqlQueryToCSV($filename, $query)
{
    $result = mysql_query($query);
    $num_fields = mysql_num_fields($result);
    $headers = array();
    for ($i = 0; $i < $num_fields; $i++) {
            $headers[] = mysql_field_name($result , $i);
    }
    $fp = fopen(mysql_real_escape_string(getcwd().'\\'.$filename), 'w');
    if ($fp) {
 fputcsv($fp, $headers);
 while ($row = mysql_fetch_array($result)) {
     $arrayValues = array();
     foreach ($headers as $header)
     {
         $arrayValues[] = $row[$header];
     }
     fputcsv($fp, $arrayValues);
 }
    }
    fclose($fp);
}

来源:http ://forums.exchangecore.com/topic/907-function-to-convert-mysql-query-to-csv-file-with-php/

于 2013-04-04T13:00:09.527 回答
0

当您使用任何程序(猜测 Excel)在 Windows 中打开它时,您应该能够指定用于分隔/包围字段的字符。这可能只是假设您只想使用逗号分隔但忽略它们周围的双引号。

于 2013-04-04T12:47:30.150 回答