• 技术文章 >后端开发 >PHP问题

    如何解决php生成文件名乱码问题

    藏色散人藏色散人2021-04-02 09:07:52原创86

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

    本文操作环境:Windows7系统、PHP7.1版,DELL G3电脑

    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生成文件名乱码问题的详细内容,更多请关注php中文网其它相关文章!

    本文原创发布php中文网,转载请注明出处,感谢您的尊重!
    专题推荐:php
    上一篇:如何解决nginx php 499错误问题 下一篇:php隐藏手机号中间四位的方法
    第15期线上培训班

    相关文章推荐

    • php pdo oracle 乱码怎么办• php fread 中文乱码怎么办• php分割字符串乱码怎么办• php读文件内容乱码怎么办

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网