2017-04-20 40 views
0

我有一個簡單的PHP腳本,可以將HTML表格轉換爲CSV文件。由於UTF-8轉換原因,我添加了fwrite($fp,"\xEF\xBB\xBF");,並且在MS Excel(Mac和Windows - 最新版本)中打開CSV文件時,除了額外的空行(每隔一行)之外,所有內容都能正常工作。PHP - 將HTML表格轉換爲CSV添加空行

用Mac打開此預覽不顯示空行 - 當我刪除fwrite($fp,"\xEF\xBB\xBF");它也不會添加空行,但當然我的文本被破壞。

這是我的PHP腳本:

<?php 

include('simplehtmldom_1_5/simple_html_dom.php'); 

$table = file_get_contents('hotel.html'); 
$html = str_get_html($table); 

//Generate the CSV file header 
header("Content-type: application/vnd.ms-excel"); 
header("Content-Encoding: UTF-8"); 
header("Content-type: text/csv; charset=UTF-8"); 
header("Content-disposition: csv" . date("Y-m-d") . ".csv"); 
header('Content-Disposition: attachment; filename=pkb.csv'); 


$fp = fopen("php://output", "w"); 
fwrite($fp,"\xEF\xBB\xBF"); 


foreach($html->find('tr') as $element) 
{ 
    $td = array(); 
    foreach($element->find('th') as $row) 
    { 
     $td [] = $row->plaintext; 
    } 
    fputcsv($fp, $td, ';'); 
    $td = array(); 
    foreach($element->find('td') as $row) 
    { 
     $td [] = $row->plaintext; 
    } 
    fputcsv($fp, $td, ';'); 
} 
fclose($fp); 

?> 

HTML表格是相當普遍:

<table> 
 
<th> 
 
</th> 
 
<tr> 
 
<td> 
 
</td> 
 
</tr> 
 
... 
 
</table>

而且轉換後的CSV用Excel打開的樣子說:

CSV opened in Excel with empty rows

也許你會發現我的錯誤,它會產生這些額外的空行。 非常感謝球員

回答

0

問題是重複迭代

foreach($html->find('tr') as $element) { 
    $td = []; 
    foreach($element->find('th') as $row) { 
     $td[] = $row->plaintext; 
    } 

    if (!empty($td)) { 
     fputcsv($fp, $td, ';'); 
    } 

    $td = []; 
    foreach($element->find('td') as $row) { 
     $td[] = $row->plaintext; 
    } 

    fputcsv($fp, $td, ';'); 
} 

類似的東西是一個簡單的修補程序,但我會建議重寫整個的foreach。

+0

嗨decanus,感謝您的快速反應。我也考慮過這一點,但在我的表格結構中肯定沒有空值。 – neilhurt

+0

@neilhurt我發現這個問題,它的第一個foreach。當你在日記上時。 只存在於一行中。但是你迭代併爲每一行添加一個空的td。看到我編輯的答案 – decanus

+0

哇,就是這樣。非常感謝decanus – neilhurt