php 添加bom,PHP 下载文件时自动添加bom头的方法实例

BOM头是UTF-8编码文件的一个标识,用于告诉系统文件采用的是UTF-8编码。在某些情况下,如Windows下的记事本或CSV/Excel文件,如果没有BOM头,可能会导致中文乱码。通过在输出文件前添加BOM头(EFBBBF),可以确保文件被正确识别为UTF-8编码,避免乱码出现。本文介绍了如何在PHP中添加BOM头到输出文件,以确保接口下载的CSV或Excel文件能正常显示中文内容。
摘要由CSDN通过智能技术生成

首先弄清楚,什么是bom头?在Windows下用记事本之类的程序将文本文件保存为UTF-8格式时,记事本会在文件头前面加上几个不可见的字符(EF BB BF),就是所谓的BOM(Byte order Mark)。

不仅限于 记事本保存的文件,只要在文件的开口包含了EF BB BF 几个不可见的字符(十六进制应该是是xEFxBBxBF,用二进制编辑文件可见)。这像是一个约定俗成的东西,当系统看到这玩意的时候,就会觉得你这个文件是UTF-8编码的。

如果你的接口是UTF-8的,你需要强制下载一个文件,比如csv.excel在默认情况(中文背景)下,认为csv是GB编码的,所以如果米有bom头,那你给用户呈现的文件,可能就是乱码了。

怎么加bom头呢?

在输出文件之前加上bom头就可以了:

复制代码 代码如下:

// 文件名

$filename = "www.yinxi.net.net.csv";  header("Expires: " . gmdate("D, d M Y H:i:s", $_SERVER["REQUEST_TIME"] + 10) . " GMT");

header("Cache-Control: max-age=10");

//header("Content-Type: application/vnd.ms-excel; charset=utf-8");

header("Content-Type: text/csv; charset=utf-8");

header("Content-Disposition: attachment; filename={$filename}");  // 如果结果中有提示信息,则把第一行输出改为提示信息文字

$out = "xEFxBBxBF";// 加上bom头,系统自动默认为UTF-8编码

if (!empty($extra["notice"])) {

$out .= "{$extra["notice"]}rn";

}  // 输出

foreach ($table as $row) {

$out .= implode(",", $row) . "rn";

}  /* if (mb_detect_encoding()($out) == "UTF-8") {

$out = iconv("UTF-8//IGNORE", "GBK", $out);

} */

echo $out;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值