如何将带有 php 的 csv 文件导入到带有 utf8 unicode 的数据库中
How can import csv file with php into database with utf8 unicode
我想使用 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 导入?
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。
我想使用 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 导入?
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。