2010-01-12 98 views
2
<?php 
$row = 1; 
$handle = fopen ("test.csv","r"); 
while ($data = fgetcsv ($handle, 1000, ",")) { 
    $num = count ($data); 
    print "<p> $num fields in line $row: <br>\n"; 
    $row++; 
    for ($c=0; $c < $num; $c++) { 
     print $data[$c] . "<br>\n"; 
    } 
} 
fclose ($handle); 
?> 

以上来自PHP手册,但我没有看到指定的编码(如UTF8左右)如何在PHP中处理csv文件时指定编码?

+0

是的,当然,我会的,伙计:) – user198729 2010-01-12 11:08:21

回答

3

试图改变语言环境。

像它说,在下面的例子中的manual你给:

注:区域设置是由该功能考虑在内。如果LANG是例如单字节编码的en_US.UTF-8, 文件被此功能读错。

Suggested approach by comment on the same page

setlocale(LC_ALL, 'ja_JP.UTF8'); // for japanese locale 

setlocale()

地点名称可在RFC 1766ISO 639被发现。不同的系统有不同的区域设置命名方案。 [&hellip;]在Windows上,setlocale(LC_ALL, '')从系统的区域/语言设置(可通过控制面板访问)设置 区域设置名称。

0

一个这样的事情是发生UTF字节顺序标记或BOM。字节顺序标记的UTF-8字符是U + FEFF,或者说是位于文本文件开头的三个字节 - 0xef,0xbb和0xbf。对于UTF-16,它用于指示字节顺序。对于UTF-8,它并不是真的有必要。

所以你需要检测三个字节并删除BOM。下面是关于如何检测和删除三个字节的简单示例。

$str = file_get_contents('file.utf8.csv'); 
$bom = pack("CCC", 0xef, 0xbb, 0xbf); 
if (0 == strncmp($str, $bom, 3)) { 
    echo "BOM detected - file is UTF-8\n"; 
    $str = substr($str, 3); 
} 

这是所有

0

试试这个:

<?php 
$handle = fopen ("specialchars.csv","r"); 
echo '<table border="1"><tr><td>First name</td><td>Last name</td></tr><tr>'; 
while ($data = fgetcsv ($handle, 1000, ";")) { 
     $data = array_map("utf8_encode", $data); //added 
     $num = count ($data); 
     for ($c=0; $c < $num; $c++) { 
      // output data 
      echo "<td>$data[$c]</td>"; 
     } 
     echo "</tr><tr>"; 
} 
?> 
相关问题