1

関数を使用して CSV をインポートしていfgetcsv()ますが、これはすべてうまく機能しています。

しかし、データベースのデータを見ると、疑問符が付いた黒いひし形が表示されます。データが表示されないため、データを再度エコーバックする場合、これはそれほど問題ではありませんが、CSV フィールドの 1 つを MySQL の日付として使用したい場合、日付として認識されず、として保存され0000-00-00ます。

例えば

ここに画像の説明を入力

この問題は CSV のエンコーディングに関係していると思いますか? 誰でもアドバイスを提供できますか?

ありがとう!

編集:ここで役立つ場合は私のインポートスクリプトであり、mb_detect_encodingによるとエンコードタイプはASCIIです

<?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);
}

?>
4

3 に答える 3

2

データベースが CSV ファイルとは異なる文字エンコーディングを使用している場合、データを最初に変換する必要がある可能性があります。

これを実行する 1 つの方法は、mb_convert_encoding()関数を使用することです。

また、mb_detect_encoding()は、指定された入力文字列の文字エンコーディングを検出できる必要があります。

于 2012-05-13T18:07:03.333 に答える
0

誰かが別のフォーラムで解決策を見つけました:

これらは NUL 文字 (ASCII コード 0x00) です。次のように置き換えます。

$string = str_replace(chr(0), '', $string);

于 2012-05-14T20:32:02.550 に答える