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

时间:2011-11-21 10:00:09

标签: php encoding csv utf-8

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

我使用以下函数导入和读取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);
}

我想我需要以某种方式指定字符编码,但我无法弄清楚如何。按照标准,cvs文件由WINDOWS-1257编码,据我所知。我的页面的其余部分使用UTF-8

进行编码

任何人都有任何巧妙的技巧?

3 个答案:

答案 0 :(得分:0)

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

使用utf8_encode将它们转换为utf8(更好,因为utf8_encode假定您的源字符集是ISO-8859-1,它不是)iconv(http://php.net/iconv

答案 1 :(得分:0)

这个丑陋的黑客工作了。我不得不避免使用fgetcsvfopen

$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;
}

希望有所帮助

答案 2 :(得分:0)

首先,要查看UTF-8编码,请将其添加到页面的开头:

<?php header('Content-Type: text/html; charset=UTF-8'); ?>

fopenfgetcsv使用编码:

$data = array_map("utf8_encode", $data);

最重要:使用记事本打开CSV并将其保存为UTF-8格式:

enter image description here