CSV dosyasındaki bazı karakterler PHP fgetcsv sırasında okuma () değil

3 Cevap php

Ben php ile bir CSV dosyası okuyorum. √ ve php kod sadece bu karaktere karşılaşılan her zaman üzerine atlıyor: satır çoğu gerçekten karekök sembolü "onay işareti" var.

İşte benim kod ("CSV stil" biçiminde tarayıcı penceresine baskı yüzden çizgiler doğru yerde kırmak olmadığını kontrol edebilirsiniz olduğunu:

$file = fopen($uploadfile, 'r');
while (($line = fgetcsv($file)) !== FALSE) {
   foreach ($line as $key => $value) {
    if ($value) {
       echo $value.",";
    }
   }
   echo "<br />";
}
fclose($file);

Geçici bir çözüm olarak, ben sadece bulma yaşıyorum ve 1 değerlerini elle, Excel ile checkmarks yerine. Açıkçası ben yardım için teşekkürler :) daha verimli bir çözüm istiyorum!

3 Cevap

fgetcsv () yalnızca standart ASCII karakter üzerinde çalışır; bu yüzden muhtemelen kare kök semboller atlanıyor "doğru" var. Ancak, oldukça elle checkmarks yerine daha, siz) (bu karakterlerde () bir str_replace yapmak, bir dizeye dosyasını okuyun ve sonra fgetcsv kullanarak ayrıştırmak olabilir. Sen thusly (fgetcsv için) bir dosya işaretçisi bir dize açabilirsiniz:

$fp = fopen('php://memory', 'rw');
fwrite($fp, (string)$string);
rewind($fp);
while (($line = fgetcsv($fp)) !== FALSE)
...

Ben dizeleri aksanlı ilk karakterleri ile benzer bir sorun vardı. Sonunda fgets() ve explode() yerine (virgülle ayrılmış ben csv tahmin ediyorum) kullanarak, aşağıdaki fgetscv vazgeçti ve yaptım:

$file = fopen($uploadfile, 'r');

while (($the_line = fgets($file)) !== FALSE)  // <-- fgets
{
  $line = explode(',', $the_line);            // <-- explode
  foreach ($line as $key => $value) 
  {
    if ($value) 
    {
      echo $value.",";
    }
  }
  echo "<br />";
}

fclose($file);

Sen setlocale belgeleri yazılı ar gerekir

Note: Locale setting is taken into account by this function. If LANG is e.g. en_US.UTF-8, files in one-byte encoding are read wrong by this function.

önce fgetcsv setlocale (LC_ALL, 'en_US.UTF-8') ekleyin. Benim durumumda bu 'lt_LT.UTF-8' oldu.

Bu davranış, php bug olarak bildirilir