如何使用utf8 unicode将带有php的csv文件导入数据库

时间:2015-03-10 09:14:55

标签: php mysql csv utf-8 import

我想使用php和mysql将csv文件导入数据库,我的csv文件有utf8字符,但是当我导入它时,它不支持utf8,我无法正确导入数据。请帮帮我怎么做?

/*CSV FILE Validation Start*/

if (!empty($_FILES['excelFile']['name'])) {
    $errFlg=0;
    $errMsg='';
    $valid_document_formats = array("csv"); 
    $valid_document_size=524288; // 512 KB

    $documentName = $_FILES['excelFile']['name'];    // Actual Document Name
    $documentSize = $_FILES['excelFile']['size'];    // Actual Document Size

    list($txt, $ext) = explode(".", $documentName);       // Get Actual Document Formate
    if (in_array($ext, $valid_document_formats)) {    // Check Document Formate
        if ($documentSize < $valid_document_size) {      // Check Document Size
            $new_doc_name = time() . "." . $ext;    // Document New Name
            $tmpDoc = $_FILES['excelFile']['tmp_name'];
        }else{
            $errMsg= "Document size max 512 KB";       // Error Message for max size
            $errFlg=1;
        }
    }else{
        $errMsg= "Invalid Document format";           // Error Message for Invalid format size4
        $errFlg=1;
    }
} else{
    $errMsg= "Please select an Document";
    $errFlg=1;
}
/*CSV FILE Validation End*/



/*CSV FILE Import Start*/
if(!$errFlg){
    $uploadedDocPath='excel_file/';        // folder name  for document upload
    if(move_uploaded_file($tmpDoc, $uploadedDocPath.$new_doc_name)){
        if(($handle = fopen("excel_file/".$new_doc_name , "r")) !== FALSE) 
        {
            $fileAdded=true;
            while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) 
            {
                $num = count($data);
                //echo var_dump($data);
                mysql_query("SET NAMES UTF8");
                echo $query="INSERT INTO csv_data(name,phone,city) values('".$data[0]."','".$data[1]."','".$data[2]."')";
                mysql_query($query);
            }
            fclose($handle);
               $csvname = "excel_file/".$new_doc_name;
               unlink($csvname);
        }
    }else{
        $errMsg= "Please Try after some time";
        $errFlg=1;
    }
}
/*CSV FILE Import End*/

如何使用utf8导入?

1 个答案:

答案 0 :(得分:0)

Csv可能是UTF-8,但你的文件将在某些windows- *编码(或ISO *)中。简单的方法是将数据转换为UTF-8。使用iconv功能执行此任务。

echo $query="INSERT INTO csv_data(name,phone,city)  values('". iconv('cp1250', 'utf-8', $data[0]) ."','". iconv('cp1250', 'utf-8', $data[1]) ."','". iconv('cp1250', 'utf-8', $data[2])."')";

您必须找到csv的编码。对我来说这是cp1250(windows-1250)。

编辑:您也可以尝试更改(如果iconv无效)

mysql_query("SET NAMES UTF8");

mysql_query("SET NAMES 'utf8'");

并检查您的PHP脚本是否也是UTF-8。