Excel生成的CSV,特殊字符消失(Æ;Ø;Å;)-PHP

Excel生成的CSV,特殊字符消失(Æ;Ø;Å;)-PHP,php,encoding,csv,utf-8,Php,Encoding,Csv,Utf 8,我有一些csv文件需要使用php导入到我们的系统中。我住在挪威,我们有3个特殊字符(æå和大写字母ÆØ)。问题是大写版本从字符串中消失了。小写字母以?显示,但当使用utf8_编码时,我得到了正确的字母 我正在使用以下函数导入和读取csv文件。倾倒$arr $row = 1; $arr = array(); if (($handle = fopen($imp['importBreddegave'], "r")) !== FALSE) { while (($data = fgetcsv($h

我有一些csv文件需要使用php导入到我们的系统中。我住在挪威,我们有3个特殊字符(æå和大写字母ÆØ)。问题是大写版本从字符串中消失了。小写字母以?显示,但当使用utf8_编码时,我得到了正确的字母

我正在使用以下函数导入和读取csv文件。倾倒
$arr

$row = 1;
$arr = array();
if (($handle = fopen($imp['importBreddegave'], "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
        $num = count($data);
        $row++;

        for ($c=0; $c < $num; $c++) {
            $arr[$row][$c] = $data[$c];
        }
    }

    fclose($handle);
}
$row=1;
$arr=array();
if($handle=fopen($imp['importBreddegave',“r”)!==FALSE){
while(($data=fgetcsv($handle,1000,“;”)!==FALSE){
$num=计数($data);
$row++;
对于($c=0;$c<$num;$c++){
$arr[$row][$c]=$data[$c];
}
}
fclose($handle);
}
我想我需要以某种方式指定字符编码,但我不知道如何指定。据我所知,按照标准,cvs文件由WINDOWS-1257编码。我页面的其余部分用
UTF-8编码


有人有什么妙招吗?

如果您的页面输出UTF-8数据(或者更好:声明它通过HTTP头/元字符集输出UTF-8),您应该确保输出的数据也是UTF-8。 您可以在Windows-1257中输出数据,尽管您的页面声明它是UTF-8,这会导致字符无法正确呈现


使用utf8_编码(更好,因为utf8_编码假定源字符集为ISO-8859-1,而不是)iconv()将它们转换为utf8()

这一丑陋的破解成功了。我不得不避免使用
fgetcsv
fopen

$arr = array();
$content = iconv('windows-1252', 'utf-8', file_get_contents($imp['importBreddegave']));
$contentArr = explode("\n",$content);
foreach ($contentArr as $kr) {
    $tempArr = explode(";",$kr);
    $arr[] = $tempArr;
}

希望对您有所帮助首先,要查看UTF-8编码,请在页面开头添加以下内容:

使用
fopen
fgetcsv
进行编码:

$data=array\u map(“utf8\u encode”,$data)

最重要的是:使用记事本打开CSV并以UTF-8格式保存:


使用echo$fc=iconv('windows-1255','utf-8',文件获取内容('imp['importBreddegave'))正确显示内容,但如何将iconv与fopen一起使用?$arr[$row][$c]=$iconv('windows-1251','utf-8',数据[$c]);不起作用,此时大写字母已经消失。我想我需要在fopen上详细说明这一点,但我不知道怎么做。请看“注释”下的内容-这可能是罪魁祸首。在执行当前代码之前,请尝试以下操作:setlocale(LC_CTYPE,'en_US.UTF-8');没用,但我自己设法修好了。似乎
fgetcsv
fopen
不能很好地处理这些字符。使用
file\u get\u contents
将脚本写入并分解字符串。虽然没有那么整洁,但它很管用。