PHP ile Mac kullanıcıları için bir CSV dosyası yazma

3 Cevap php

Ben teoride önemli işletim sistemleri için çalışır CSV dosyaları yazmak için genel bir algoritma kullanır. Ancak, istemci bir kaç hafta önce Mac kullanmaya başladı ve CSV dosyası Mac 12.2.1 için Microsoft Excel 2008'de okunamaz söyleyip duruyorlar.

Onlar OS kullanmak üzere yapılandırılmış "noktalı virgül;" Ben CSV yazıyorum tam olarak ne olduğunu liste ayırıcı olarak. Onlar da not defteri dosyasını açtığınızda, her şeyi tek bir satırda görüntülenir, hiçbir linebreaks vardır fark olduğunu söylemek; Excel dosyasını düzgün okuyamıyor neden olan; ama benim kod, ben çapraz tarayıcı satır sonu kullanıyorum \r\n

Bu kullandığım tam kodu:

header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
// Output to browser with appropriate mime type, you choose ;)
header("Content-type: text/x-csv");
//header("Content-type: text/csv");
//header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=participantes.csv");

$separator = ";";
$rs = $sql->doquery("SELECT A QUERY TO RETRIEVE DATA FROM THE DB");

$header = "";
$num_fields = mysql_num_fields($rs);

for($i=0; $i<$num_fields; $i++){
  $field = mysql_field_name($rs, $i);
  $header .= $field.$separator;
}

echo $header."\r\n";

while($row = $sql->fetch($rs)){
  $str = "";
  for($i=0; $i<$num_fields; $i++){
    $field = mysql_field_name($rs, $i);
    $value = str_replace(";", ",", $row->{$field});
    $value = str_replace("\n", ",", $value);
    $value = str_replace("\d", ",", $value);
    $value = str_replace(chr(13), ",", $value);
    $str .= $value.$separator;
  }
  echo $str."\r\n";
}

Mac kullanıcıları düzgün dosyayı okuyabilir yüzden yapabileceğim bir şey var mı?

3 Cevap

Ayıklama amaçları için:

  1. CSV dosyası oluşturun ve posta yoluyla onlara göndermek. Onlar tamam açabilir miyim?
  2. Sayfanızda dosyayı indirmek ve o size geri gönderilmesi var. Onlar tarayıcıya göndermek ne ya da kaydettiğiniz ne farklı bakmak off-şans ekarte etmek bir Hex editörü ile dosyaları karşılaştırın.
  3. Onların Excel ayarlarını iki kez kontrol ettirin.
  4. Onları sıfırdan (bir mac üzerinde metin editörü) bir çalışma CSV dosyası oluşturun ve yaklaşım herhangi bir farkları var.

Burada CSV bir sekme ayrılmış verileri dönüştürmek için yaptığı bazı kod ve benim mac cezası geliyor. Ben beni oldukça tarayıcıya iterek daha indirmek için tıklayın yapmak kurmak olduğunu unutmayın. Bu harika bir çözüm değil (ben kod bok eminim) ama ben için ne ihtiyacınız için çalışıyor.

$input = $_POST['input'];
//Remove commas.
$replacedinput1 = str_replace(",", "-", $input);
//remove tabs, replace with commas
$replacedinput2 = str_replace(" ", ",", $replacedinput1);
//create an array
$explodedinput = explode("
", $replacedinput2);
//open the CSV file to write to; delete other text in it
$opencsvfile = fopen("/var/www/main/tools/replace_tab.csv","w+");
//for each line in the array, write it to the file
foreach($explodedinput as $line) {
fputcsv ($opencsvfile, split(',', $line));
};
//close the file
fclose($opencsvfile);
//have the user download the file.
/*
header('Pragma: public');
header('Expires: Fri, 01 Jan 2010 00:00:00 GMT');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Type: application/csv');
header('Content-Disposition: filename=replace_tab.csv'); */

//Or not, since I can't get it to work.
echo "<a href='replace_tab.csv'>Download CSV File, then open in Numbers or Excel (Note, you may need to right click, save as.)</a>.";

Mac satır karakteri LF (unicode U +000 A) ve Windows bunu CR + LF (Unicode U +000 D U +000 A izledi) 'dir.

Csv bir Mac üzerinde okunamayacak Belki de bu yüzden.