我正在读一个包含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",
}