2012-05-13 83 views
1

我使用fgetcsv()函數導入CSV,該函數運行良好。CSV導入編碼

但是,當我查看數據庫中的數據時,發現帶有問號的黑色鑽石。當再次回顯數據時,這並不是什麼大問題,因爲它們沒有出現,但是當我想將其中一個CSV字段用作MySQL日期時,它不會被識別爲日期,而是存儲爲0000-00-00

例如

enter image description here

我認爲這個問題是值得做的CSV的編碼?任何人都可以提供建議嗎?

謝謝!

編輯:如果它幫助這裏是我的導入腳本,並根據如果您的數據庫使用不同的字符編碼大於CSV文件mb_detect_encoding

<?php 
include 'config.php'; 
include 'opendb.php'; 
ini_set("auto_detect_line_endings", true); 

$row = 0; 
$tmpName = $_FILES['csv']['tmp_name']; 

if (($handle = fopen($tmpName, "r")) !== FALSE) { 
    $num = count($data); 

    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) 
    { 
     $noQuotes = str_replace("\"", '', $data); 
     $originalDate = $noQuotes[1]; 

     //$delivery_date = date('Y-m-d', strtotime($originalDate)); 

     $parts = explode('/', $originalDate); 
     $delivery_date = $parts[2] . '-' . $parts[1] . '-' . $parts[0]; 

     $row++; 

     $import="INSERT into dispatch (delivery_note_number, delivery_date, dispatch_date, customer_delivery_date, delivery_line, produce, variety, quantity, pallets, count, depot, customer, grower, haulier, status) 
     values ('$noQuotes[0]', '$delivery_date', '$noQuotes[2]', '$noQuotes[3]', '$noQuotes[4]', '$noQuotes[5]', '$noQuotes[6]', '$noQuotes[7]', '$noQuotes[8]', '$noQuotes[9]', '$noQuotes[10]', '$noQuotes[11]', '$noQuotes[12]', '$noQuotes[13]', '$noQuotes[14]')"; 

     echo $import; 
     mysql_query($import) or die(mysql_error()); 
    } 

     //header("location:list_dispatch.php?st=recordsadded"); 


    fclose($handle); 
} 

?> 
+0

你可能沒有使用utf-8編碼?您是否將日期提交爲日期? – three

+0

做一個十六進制值的轉儲,甚至更好,在這裏輸出'base64_encode($ date);'。這給了我們一個二進制完美的數據克隆,並且可以幫助別人識別這些雜散字節。也許utf16? – goat

+0

base64_encode輸出爲ADIAMAAxADIALQAwADEALQAwADQA – trh88

回答

0

有人發現在另一個論壇的解決方案:

這些都是NULL字符(ASCII碼爲0x00),這樣的替換它們:

$字符串= str_replace函數(CHR(0), '' ,$ string);

2

編碼類型是ASCII,則可能是數據應該先轉換。

執行此操作的一種方法是使用mb_convert_encoding()函數。

也有用,mb_detect_encoding()應該能夠檢測給定輸入字符串的字符編碼。

+1

mb_detect_encoding爲字段返回類型ASCII – trh88

0
fputcsv($f, $array, ' ', chr(0));