天天看點

導出csv檔案時,處理分隔符問題(轉)

<code>CSV</code><code>檔案預設以英文逗号做為列分隔符,換行符作為行分隔符。</code><code></code> <code>如果不提供網頁形式隻用指令行或二進制程式輸出資料到</code><code>CSV</code><code>,隻需要将資料段按</code><code>,</code><code>分割,行按</code><code>\n</code><code>分割,寫入到一個</code><code>.csv</code><code>檔案即可。</code><code></code> <code>但有時字段裡含有</code><code>,</code><code>和換行符就麻煩了,資料輸出會出現混亂。</code>

<code>這時可以使用雙引号</code><code>"</code><code>來将每個字段内容括起來,</code><code>CSV</code><code>預設認為由</code><code>""</code><code>括起來的内容是一個欄位, 這時不管欄位内容裡有除</code><code>"</code><code>之外字元的任何字元都可以按原來形式引用。</code><code></code><code></code>

<code>例如</code> <code>"</code><code>姓</code><code>;</code> <code>名</code><code>:k,j",email</code><code>,是一行的内容,</code><code>"</code> <code>姓</code><code>;</code><code>名</code><code>:k,j"</code> <code>是一個單元格裡的。</code><code></code><code>用</code><code>""</code><code>括起來的欄位内容裡有</code><code>CSV</code><code>預設的換行符也沒關系。這樣輸出資料就很友善了。注意"是要加轉義字元。</code>

<code>eg,</code>

<code>$content = "\"".$result_name."\",\"".$result_employer."\",\"".$result_specialism."\",\"".$rank[0]."\",";</code>

<code>echo $content;</code>

<code></code><code>唯一需要注意的 就是若字段内容裡含有</code><code>"</code><code>怎麼辦。這時隻需将</code><code>"</code><code>替換成兩個連續的英文雙引号</code><code>("")</code><code>即可。</code><code>CSV</code><code>會将字段裡的兩個雙引号</code><code>""</code><code>顯示成一個。</code>

<code>eg,</code>

$result_specialism = str_replace("\"","\"\"",$datamap['specialism']-&gt;content());

如果需要使用網頁導出資料的形式,需要寫header了

以PHP為例:

首先做一個頁面,是被下載下傳的CSV檔案頁 saveCSV.php

&lt;?php

//指明此檔案類型,頁面類型

header("Content-Disposition: attachment; filename=".$filename.".csv");

header(''Content-Type:text/csv'');

/*

處理資料輸出

*/

?&gt;

直接點選到一個php頁面就能下載下傳了

form裡用一 個&lt;input type='button' value='導出CSV' onclick='saveCSV()'/&gt;,saveCSV()是一個JS方法,将form的action指向saveCSV.php

http://www.cnblogs.com/chyong168/archive/2012/03/22/2411002.html