我正在读一个包含ascii和UTF-8字符的csv,并放入一个存储在mongo中的关联数组 . 我到处寻找答案,最后想出了一个答案 . fgetcsv在特殊字符方面存在问题,正如许多其他帖子中多次提到的那样 .

例如:

注意:此功能会考虑区域设置 . 如果LANG是例如en_US.UTF-8,此函数读取单字节编码的文件错误 .

没有其他解决方案适合我 . 我决定改用str_getcsv . 我希望发布这篇文章,希望这有望帮助其他人 . 还要看看是否有其他人有更好的解决方案 .

需要向威廉姆斯先生和杜里克先生提供信贷 . 帖子在这里 . 这个链接是我在这个问题上找到的最好的 . http://www.kinghost.com.br/php/function.str-getcsv.php

$csvheader = NULL;
$data = array();
if (($handle = fopen($argv[1], "r")) !== FALSE) {

while (($row = fgets($handle, 4096)) !== FALSE) {

    if (!$csvHeader) {

        //format csv header row into array of strings
        $row = str_replace('"', '', $row);
        $row = str_replace("\r\n", '', $row);

        $num = strlen($row) - strlen(str_replace(",", "", $row));

        $csvHeader = array();
        $csvHeader = explode( ",", $row , ($num+1) );

    } else {

         //line that fixed my issue
         $row = utf8_encode($row);

         $Data = str_getcsv($row, "\n"); 
         foreach($Data as &$row){
             $row = str_getcsv($row, ",");
             $data[] = array_combine($csvHeader, $row);
         } 
    }
}
fclose($handle);
}

示例结果:值字段导致问题 .

{
"_id" : ObjectId("52932826436b1cde170041d6"),
"id" : "48",
"afdrthdrth" : "11259",
"drthdrth" : "3439428",
"fdrth" : "87",
"firht" : "COPYRIGHT",
"value" : "©2005 Junghvghme / Mugcfgnss, allcfgncfgserved",
}