我正在使用fgetcsv()
功能导入CSV,这样做很好。
但是,当我查看数据库中的数据时,我会看到带有问号的黑色钻石。当再次回显数据时,这不是太大的问题,因为它们没有出现,但是当我想使用其中一个CSV字段作为MySQL日期时,它不会被识别为日期并且是存储为0000-00-00
。
e.g。
我认为这个问题与CSV的编码有关?有人可以提供任何建议吗?
谢谢!
编辑:如果它有帮助,这里是我的导入脚本,编码类型是ASCII,根据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 :(得分:2)
如果您的数据库使用的字符编码与CSV文件不同,则可能首先转换数据。
执行此操作的一种方法是使用mb_convert_encoding()功能。
同样有用,mb_detect_encoding()应该能够检测给定输入字符串的字符编码。
答案 1 :(得分:0)
有人在另一个论坛找到了解决方案:
这些是NUL字符(ASCII码0x00),替换它们如下:
$ string = str_replace(chr(0),'',$ string);
答案 2 :(得分:0)
fputcsv($f, $array, ' ', chr(0));