提问人:EarthLing 提问时间:9/11/2023 最后编辑:EarthLing 更新时间:9/11/2023 访问量:102
PHP / 输出文件编码 / 从 ANSI 更改为 UTF-8-BOM
PHP / Output file Encoding / Changing from ANSI to UTF-8-BOM
问:
有没有办法防止PHP自动更改Excel文件或设置编码的编码?
已经尝试过:
ini_set('default_charset', 'ANSI');
ini_set('output_encoding', 'ANSI');
header('Content-Type: application/vnd.ms-excel; charset=ANSI');
使用“phpoffice/phpexcel”。如果我在服务器上保存构建的 Excel 文件,并在没有 PHP 的情况下下载保存的文件,那么在 NotePad++ 中对该文件的编码是 ANSI,并且文件在 MS Excel 程序中正确打开。
但是,如果我尝试通过PHP返回正确的文件:
readfile($file_path);
// OR directly write to output
$objWriter->save('php://output');
然后下载的 Excel 文件编码将是 UTF-8-BOM,结束 MS Excel 只显示该文件的奇怪符号。但是我可以在NotePad ++中打开该文件并将编码更改为ANSI,然后该文件在MS Excel中正确打开。
如何使用PHP将Excel文件返回到客户端,而无需自动更改该文件的编码?
答:
0赞
EarthLing
9/11/2023
#1
由于使用 PHP @CBroe和检测 UTF BOM(字节顺序标记),在设置“附件”标头之前:
$has_bomed_files = false;
foreach (get_included_files() as $file_path)
{
$str = file_get_contents($file_path);
$bom = pack("CCC", 0xef, 0xbb, 0xbf);
if (0 === strncmp($str, $bom, 3))
{
$has_bomed_files = true;
print $file_path;
print '<br>';
}
}
if ($has_bomed_files)
exit(__FILE__ . ":" . __LINE__);
发现,BOM 在一个类中,我已经删除了该 BOM,现在 PHP 返回正确的 Excel 文件。
评论
shell head -c3 "show_xls.php" | grep -q $'\xef\xbb\xbf' && echo yes
$objWriter->save