php生成文件名乱码的解决方法

这篇文章主要介绍php生成文件名乱码的解决方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

创新互联是一家集网站建设,珲春企业网站建设,珲春品牌网站建设,网站定制,珲春网站建设报价,网络营销,网络优化,珲春网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

php生成文件名乱码的解决办法:1、将所有的+号替换为“%20”;2、添加“header("Content-type: application/vnd.ms-excel");”;3、删除“filename=xxx”两边的空格。

PHP导出文件名乱码解决

问题场景:

统计数据需要增加一个到处excel功能, 于是使用composer安装了phpspreadsheet组件,进行数据处理并导出。遇到ASCII命名的文件名时, 都是导出一切正常, 但是遇到中文文件名时,导出的文件名是乱码的。

此处直接贴出解决方案:

1. 文件名处理

因为PHP的urlencode函数会将各种空白字符转码为+号, 这个+号无论是chrome还是Firefox都是不会转义的

所以此处将所有的+号再次替换为%20

$file_name = '导出文件.xls'; // 这是原本要导出的文件名
$encoded_filename = url_encode($file_name);// 将文件名进行urlencode转码
$encoded_filename = str_replace('+', '%20', $encoded_filename);

2. 头文件:文件类型声明

如果导出的是一个文件,不是确定的excel类型时,使用文件头No.1

我导出的是一个excel下xls格式的表格,所以, 我使用的是文件头No.2

// 文件头No.1: 告诉浏览器这里要有一个文件流输出
header("Content-type: application/octet-stream");
// 文件头No.2: 告诉浏览器这里要输出一个excel文件
header("Content-type: application/vnd.ms-excel");

头文件: 下载文件名声明

这一步是关键, 有两个需要注意的地方

无论是filename=xxx还是filename*=xxx, 等号两边不要有空格

filename*=xxx, 这个配置项其实是由3部分组成的, 分别是字符集(utf8)、语言(空)和urlencode过的文件名, 其中, 语言是一个空字符串, 用单引号引起来, 三个部分之间不要有空格。

header('Content-Disposition: attachment; filename="foo-%c3%a4.xls"; filename*=UTF-8\'\'foo-%c3%a4.xls');

我采用如上代码分别使用chrome, firefox, 360, ie11测试均运作良好。希望也能帮到你。

以上是“php生成文件名乱码的解决方法”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!


当前名称:php生成文件名乱码的解决方法
网址分享:http://ybzwz.com/article/ggepjp.html