2010-01-12 55 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>"; 
} 
?> 
相關問題