phpexcel导出到输出流的文件,如何兼容各个平台?

最近在做企微开发,碰到文件导出问题有点头疼,浏览器还好,但是碰到手机的话,就有很多问题,安卓微信里面直接打不开,苹果微信里面打开是空文件。下面是代码,downloadHeaders函数主要处理中文文件名问题

function downloadHeaders($filename, $charset = 'UTF-8')
{
    // 兼容各浏览器下载文件名乱码问题
    if (preg_match("/MSIE/", $_SERVER["HTTP_USER_AGENT"])) {
        $filename = urlencode($filename);
        $filename = str_replace("+", "%20", $filename);// 替换空格
        $attachment = "attachment; filename=\"{$filename}\"; charset={$charset}";
    } else if (preg_match("/Firefox/", $_SERVER["HTTP_USER_AGENT"])) {
        $attachment = 'attachment; filename*=utf-8\'\'' . $filename;
    } else if (preg_match("/(Safari)|(iphone)|(ipad)/i", $_SERVER["HTTP_USER_AGENT"])) {
        $filename = rawurlencode($filename); // 注意:rawurlencode与urlencode的区别
        $attachment = 'attachment; filename*=utf-8\'\'' . $filename;
    } else {
        $attachment = "attachment; filename=\"{$filename}\"; charset={$charset}";
    }

    return $attachment;
}



    header('Pragma: public');
    header('Expires: 0');
    header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
    header('Content-Type:application/force-download');
    header("Content-Type:application/vnd.ms-excel");
    header('Content-Type:application/octet-stream');
    header('Content-Type:application/download');
    header("Content-Disposition:" . downloadHeaders("测试.xlsx"));
    header('Content-Transfer-Encoding:binary');
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2
thebestxt

是打算直接把二进制输出出来吗?我们做的导出都是在服务器上生成文件,返回给前端的就是一个地址,这样就没有客户端跨平台的问题了。

3年前 评论

可以用内网把文件分片上传到oss之类的,返回前端一个下载地址

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!