解决 IE/Edge 导出 Excel 中文文件名乱码

问题

项目中导出 Excel 的时候,由于文件名设置的是中文字符串,在 Google 浏览器是正常的导出,文件名不会出现乱码,但是在 Edge/IE 浏览器下就会出现乱码的情况。Google 一下你会搜到很多答案,当然很多都是不靠谱的,最后问题是解决了。但是遇到这个问题的人并没有说明为什么会出现这个问题,究其根源,看博客的意思应该是从墙外找到的答案。

解决

解决这个很简单,但是需要做的就是去了解为什么要这样做,下面是解决办法。

1
2
3
4
5
6
7
8
9
10
11
function encodeFileName($filename) {
$ua = strtolower($_SERVER('HTTP_USER_AGENT'));

//判断是否为IE或Edge浏览器
if(preg_match('/msie/', $ua) || preg_match('/edge/', $ua)) {
//使用 urlencode 对文件名进行重新编码
return str_replace('+', '%20', urlencode($filename));
}

return $filename;
}

其实问题解决是很简单的,使用urlencode函数就可以了。下面慢慢道来。