Php 使用数组_映射的第一个键中出现双引号问题

Php 使用数组_映射的第一个键中出现双引号问题,php,Php,使用下面的代码,我可以从CSV文件创建关联数组。 它工作得很好,唯一的问题是,每行的第一个键都用双引号(“)保存,我不明白为什么 /* Map Rows and Loop Through Them */ $rows = array_map(function($row) { return str_getcsv($row, ';', '"'); }, file('test.csv')); $header = array_shift($rows); $csv = array(); forea

使用下面的代码,我可以从CSV文件创建关联数组。 它工作得很好,唯一的问题是,每行的第一个键都用双引号(“)保存,我不明白为什么

/* Map Rows and Loop Through Them */
$rows   = array_map(function($row) { return str_getcsv($row, ';', '"'); }, file('test.csv'));
$header = array_shift($rows);
$csv    = array();
foreach($rows as $row) {
    $csv[] = array_combine($header, $row);   
}

echo "<pre>";
print_r($csv);
echo "</pre>";
我的标题如下所示:

"TEST";"EMAIL";"NAVN";"ADDRESSE";"POSTNRBY";"TELEFON";"TUR";"TURNAVN";"ANTAL";"BELOEBIALT";"BONKODE"
"";"mail@test.com";"Donald Duck";"Paradisæblevej 111";"1234  Andeby";"12345678";"49";"Title";"1";"695";"99900714"
"";"mail@test.com";"Donald Duck";"Paradisæblevej 111";"1234  Andeby";"12345678";"49";"Title";"1";"695";"99900714"
CSV文件如下所示:

"TEST";"EMAIL";"NAVN";"ADDRESSE";"POSTNRBY";"TELEFON";"TUR";"TURNAVN";"ANTAL";"BELOEBIALT";"BONKODE"
"";"mail@test.com";"Donald Duck";"Paradisæblevej 111";"1234  Andeby";"12345678";"49";"Title";"1";"695";"99900714"
"";"mail@test.com";"Donald Duck";"Paradisæblevej 111";"1234  Andeby";"12345678";"49";"Title";"1";"695";"99900714"
注意“测试”中的引号。。。 我怎样才能解决这个问题


谢谢,这里有一个猜测:您的文件以Unicode BOM(字节顺序标记)开头,它是不可见的,但可以让您确信此单元格没有引号

测试方法:在编辑器中打开csv文件,并将其另存为Latin-1或任何其他8位编码。问题应该会消失(但可能会损坏内容)


解决方法:理想情况下,打开文件时可以指定正确的编码(utf-8?)。不过,PHP似乎没有定义utf-8+BOM编码。因此,您可以尝试应用问题答案中的(难看的)解决方案,这与问题大致相同。(或者您可以切换到Python,它确实有一个
utf-8-BOM
编码:-p)

这里有一个猜测:您的文件以Unicode BOM(字节顺序标记)开始,它是不可见的,但可以让
str\u getcsv
确信此单元格没有被引号包围

测试方法:在编辑器中打开csv文件,并将其另存为Latin-1或任何其他8位编码。问题应该会消失(但可能会损坏内容)


解决方法:理想情况下,打开文件时可以指定正确的编码(utf-8?)。不过,PHP似乎没有定义utf-8+BOM编码。因此,您可以尝试应用问题答案中的(难看的)解决方案,这与问题大致相同。(或者您可以切换到Python,它确实有一个
utf-8-BOM
编码:-p)

“TEST”
标题中有任何时髦的不可见字符…?请使用十六进制编辑器进行检查。您可以从csv中提供一些数据吗?(可能在标题中加引号)如果删除测试标题,则电子邮件中会出现双引号。除了每行末尾的换行符外,文件中没有不可见的字符。这里有一个可能的猜测:您的文件以Unicode BOM(字节顺序标记)开头,该BOM不可见,但可以使
str_getcsv
确信此单元格没有被引号包围。”文件中没有不可见字符“–您如何确认?在
“TEST”
标题中是否有不可见字符…?请使用十六进制编辑器进行检查。您可以从csv中提供一些数据吗?(可能是标题本身中的引号)如果删除测试标题,则电子邮件中会出现双引号。除了每行末尾的换行符外,文件中没有不可见的字符。这里有一个可能的猜测:您的文件以Unicode BOM(字节顺序标记)开头,该BOM不可见,但可以使
str_getcsv
确信此单元格没有被引号包围。”文件中没有不可见的字符“–您是如何确认的?实际上,我只是试图直接在服务器上创建一个新的csv文件,并将内容复制到服务器上。然后这个问题就消失了。所以这可能意味着文件编码问题,或者你提到的Unicode BOM。这是一个BOM问题。如果我在我的$header上进行json编码,我会看到这个输出[“\ufeff\”EMAIL\”,“NAVN”,“address”,“POSTNRBY”,“TELEFON”,“TUR”,“TURNAVN”,“ANTAL”,“BEL\u00d8BIALT”,“BONKODE”]我想是的,我以前就被这种东西咬过。而且BOM甚至不应该存在于UTF-8文件中,微软只是喜欢在任何地方添加它。实际上,我只是尝试直接在服务器上创建一个新的csv文件,并将内容复制到服务器上。然后这个问题就消失了。所以这可能意味着文件编码问题,或者你提到的Unicode BOM。这是一个BOM问题。如果我在我的$header上进行json编码,我会看到这个输出[“\ufeff\”EMAIL\”,“NAVN”,“address”,“POSTNRBY”,“TELEFON”,“TUR”,“TURNAVN”,“ANTAL”,“BEL\u00d8BIALT”,“BONKODE”]我想是的,我以前就被这种东西咬过。而且BOM甚至不应该存在于UTF-8文件中,微软只是喜欢到处添加它。
"TEST";"EMAIL";"NAVN";"ADDRESSE";"POSTNRBY";"TELEFON";"TUR";"TURNAVN";"ANTAL";"BELOEBIALT";"BONKODE"
"";"mail@test.com";"Donald Duck";"Paradisæblevej 111";"1234  Andeby";"12345678";"49";"Title";"1";"695";"99900714"
"";"mail@test.com";"Donald Duck";"Paradisæblevej 111";"1234  Andeby";"12345678";"49";"Title";"1";"695";"99900714"