gpt4 book ai didi

PHP 导出带有 BOM 的 CSV UTF-8 不起作用

转载 作者:行者123 更新时间:2023-12-01 19:36:41 28 4
gpt4 key购买 nike

我在导出带有中文字符的 UTF-8 CSV 时遇到了困难,在 Windows Excel 上显示乱码。我正在使用 PHP,并且已经添加了 BOM 字节标记并尝试了编码,但根本没有运气。

它们在 Notepad++、Google Spreadsheet 甚至 Mac Numbers 上都可以正常打开。但 Excel 上不行,这是客户的要求。使用 Notepad++ 打开时,编码显示为 UTF-8。如果我手动将其更改为 UTF-8 并保存,该文件在 Excel 上可以正常打开。

似乎 BOM 字节标记没有保存在输出中,因为 Notepad++ 始终将其检测为不带 BOM 的 UTF-8。

此外,CSV 不会保存在服务器上。从DB中检索数据,然后直接导出。

这是我的代码:

// Setup headers
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Description: File Transfer');
header("Content-type: text/csv");
header("Content-disposition: filename=".$filename.".csv");
header("Pragma: no-cache");

// First Method
$fp = fopen('php://output', 'w');
// Add BOM to fix UTF-8 in Excel, but doesn't work
fputs($fp, chr(0xEF) . chr(0xBB) . chr(0xBF) );

if ($fp) {

fputcsv($fp, array("Header"), ",");
fputcsv($fp, array($string_with_chinese_chars), ",");
}

fclose($fp);
exit();

// Second Method
$csv = "";
$sep = ",";
$newline = "\n"; // Also tried with PHP_EOL

$csv .= "Header";
$csv .= $newline;
$csv .= $string_with_chinese_chars;
$csv .= $newline;

// Tried all the below ways but doesn't work.
// Method 2.1
print chr(255) . chr(254) . mb_convert_encoding($csv, 'UTF-16LE', 'UTF-8');

// Method 2.2
print chr(239) . chr(187) . chr(191) . $csv;

// Method 2.3
print chr(0xEF).chr(0xBB).chr(0xBF);
print $newline;
print $csv;

最佳答案

希望这可以帮助别人。对我有用的是我必须把两者都放在:

...
echo chr(0xEF) . chr(0xBB) . chr(0xBF);
$file = fopen('php://output', 'w');
fputs($file, chr(0xEF) . chr(0xBB) . chr(0xBF));
...

我不是 PHP 专家,所以我无法解释为什么它有效,我希望这对某人有帮助,因为我也很难解决这个问题。

关于PHP 导出带有 BOM 的 CSV UTF-8 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40447325/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com