PHP Akış CSV her zaman UTF-8 BOM ekler

3 Cevap php

Aşağıdaki kod bir dizi olarak bir 'rapor çizgi' alır ve CSV içine Dönüşümü için fputcsv kullanır. Her ne olursa olsun ben kullanmak charset, bu dosyanın başında bir UTF-8 bom koyuyor aslında dışında harika çalışıyor. A) I) iso ve B belirterek ediyorum Biz çöp karakter olarak UTF-8 bom göstermek araçlarını kullanarak çok sayıda kullanıcı var, çünkü bu son derece can sıkıcı bir durum.

I have even tried writing the results to a string, stripping the UTF-8 BOM and then echo'ing it out and still get it. Is it possible that the issue resides with Apache? If I change the fopen to a local file it writes it just fine without the UTF-8 BOM.

header("Content-type: text/csv; charset=iso-8859-1");
header("Cache-Control: no-store, no-cache");
header("Content-Disposition: attachment; filename=\"report.csv\"");

$outstream = fopen("php://output",'w');

for($i = 0; $i < $report->rowCount; $i++) {
    fputcsv($outstream, $report->getTaxMatrixLineValues($i), ',', '"');
}
fclose($outstream);

exit;

3 Cevap

Benim tahminim php kaynak kodu dosyası bir BOM var ve php çıktı tamponlama etkin olması olurdu.

Bu sorunu çözer eğer ben bilmiyorum ama denedim baskı kullanarak ve aynı şeyi yapmak için fonksiyonları implode?

header("Content-type: text/csv; charset=iso-8859-1");
header("Cache-Control: no-store, no-cache");
header("Content-Disposition: attachment; filename=\"report.csv\"");

for($i = 0; $i < $report->rowCount; $i++) {
    print(implode(',',$report->getTaxMatrixLineValues($i)));
}

Bu test ama oldukça belirgin değil.

Eğer çıkıştan önce verileri dönüştürmek denediniz mi?

$line = iconv("UTF-8","ISO-8859-1//TRANSLIT",$line);