【问题标题】:Encode CSV file in php, to import in mysql用php编码CSV文件,导入mysql
【发布时间】:2015-03-16 11:08:07
【问题描述】:

我有一个希腊文的 csv 文件。文件的编码是 ASCII。我的 DB 编码设置为 utf8_general_ci。如何转换 utf8 中的每一行以便存储在数据库中?

$file = fopen($_FILES['csv']['tmp_name'],"r");

$i=0;

while(! feof($file)){
    $load = fgetcsv($file);
    foreach($load as $csv){
        $cv = explode(";", $csv);
        if($i>=10){
            $row = $students->addStudent($cv[3], $cv[2], $cv[4], NULL, $_COOKIE['school_id'], $_COOKIE['class_id']);
        }
        $i++;
    }
}

在文本编辑器中打开 csv 文件并更改格式是不适用的,因为访问者应该这样做,而且很可能他们不知道如何操作。

也试过

/*switch(mb_detect_encoding ($_FILES['csv']['tmp_name'])){
    case "ASCII":
        echo "ASCII";
        $file = iconv("ASCII", "ISO-8859-7", $_FILES['csv']['tmp_name']);
    break;

    case "UTF-8":
        echo "UTF-8";
        $file = $_FILES['csv']['tmp_name'];
    break;

    default:
        $file = utf8_encode($_FILES['csv']['tmp_name']);
    break;

}*/

但没有结果

【问题讨论】:

  • fgetcsv() 返回一个数组,你不必分解它的结果。

标签: php mysql csv


【解决方案1】:

试试这个

while(! feof($file)){
    $csv = utf8_encode(fgets($file));
    $cv = explode(";", $csv);
    if($i>=10){
        $row = $students->addStudent($cv[3], $cv[2], $cv[4], NULL, $_COOKIE['school_id'], $_COOKIE['class_id']);
    }
    $i++;
}

【讨论】:

  • 没有改变..我无法在数据库中存储学生的姓名
  • 我正在尝试使用 iconv("ASCII" "UTF-8", $file);它返回页面上的姓名,它存储在 DB 中,但字段(姓名、姓氏、父亲的姓名)为空,NOT NULL
  • 你应该尝试从代码中删除foreach($load as $csv){循环然后再试一次,我真的不明白它在这种情况下的用途。
  • 不,不做这项工作..这是结果的一部分.. ±Γ©Γ¨Γ¬ΓΌΓ² ìçôñþïá;ΓΓ° ΓΎΓáì× Γ¬Γ'èçôΓ;ΒΌΓΓ—Γ¬Γ' Γ¬Γ'èçôΓ;ΒΌΓΓ-Γ¬Γ' Γ°
  • 从这个答案中寻求帮助:stackoverflow.com/questions/14407584/…
【解决方案2】:

我将对文件进行编码,从 greek-charset 到 utf-8,然后将它们存储在 DB 中。 也许,它没有工作,因为我没有正确的编码,这工作

$file = file_get_contents($_FILES['csv']['tmp_name']);
$file = iconv('ISO-8859-7','UTF-8', $file);
file_put_contents($_FILES['csv']['tmp_name'], $file);

$filed = fopen($_FILES['csv']['tmp_name'],"r");
$i=0;

while(! feof($filed)){
$load = fgetcsv($filed);
foreach($load as $csv){
    if($i>=10){
        $cv = explode(";", $csv);
        $row = $students->addStudent($cv[3], $cv[2], $cv[4],'', $_COOKIE['school_id'], $_COOKIE['class_id']);
    }
    $i++;
}

}

【讨论】:

    【解决方案3】:

    最好的方法是使用 array_map() 函数。 IE。

    $array = array_map("utf8_decode", $array);
    

    【讨论】:

      猜你喜欢
      • 2017-02-13
      • 2017-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-10
      • 1970-01-01
      相关资源
      最近更新 更多