我有一些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
任何人都有任何巧妙的技巧?
答案 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)
这个丑陋的黑客工作了。我不得不避免使用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;
}
希望有所帮助
答案 2 :(得分:0)