Highcharts 中文社区

查看: 4364|回复: 1

[其他] 下载文件--中文文件名乱码(解决方案)

[复制链接]
  • TA的每日心情

    2018-4-10 08:53
  • 签到天数: 291 天

    [LV.8]以坛为家I

    13

    主题

    61

    帖子

    6737

    积分

    管理员

    情深缘浅

    Rank: 9Rank: 9Rank: 9

    积分
    6737

    最佳新人活跃会员

    QQ
    发表于 2013-10-10 15:34:52 | 显示全部楼层 |阅读模式
    昨日群内有一朋友遇到这样的问题。由于以前我也没弄过中文文件名,今天所以研究下。在网上看了下。发现这方法不错。
    主要原理,就是判断当前浏览器类型,根据浏览器输出不同url编码的汉字名称。
    方法还不错,我测了下,火狐,IE, 谷歌浏览器,opera,汉字名称正常。不过IE下有发现个问题,两种编码名称,具体使用哪种需要看情况。
    1. <?php
    2. //   下载文件,中文文件名,乱码解决方案,兼容各种浏览器
    3. ob_start();
    4. $ua = $_SERVER["HTTP_USER_AGENT"];

    5. $filename ="测试文件.txt";                      //文件名
    6. $encoded_filename = urlencode($filename);           //对汉字名称编码
    7. $encoded_filename = str_replace("+", "%20", $encoded_filename);            
    8. /*
    9. * %20   代表 空格
    10. *
    11. str_replace() 函数使用一个字符串替换字符串中的另一些字符。
    12. 语法

    13. str_replace(find,replace,string,count)

    14. 参数         描述
    15. find            必需。规定要查找的值。
    16. replace         必需。规定替换 find 中的值的值。
    17. string         必需。规定被搜索的字符串。
    18. count         可选。一个变量,对替换数进行计数。

    19. */
    20. header('Content-Type: application/octet-stream');
    21. //--------   IF判断浏览器类型
    22. //       preg_match  执行一个正则表达式匹配
    23. if (preg_match("/MSIE/", $ua)){                     //  IE
    24.         //header('Content-Disposition: attachment; filename="'.urldecode($encoded_filename).'"');       //具体需测试
    25.          header('Content-Disposition: attachment; filename="'.$encoded_filename.'"');
    26. }else if (preg_match("/Firefox/", $ua)){       //火狐
    27.         header('Content-Disposition: attachment; filename*="utf-8\'\''.$filename.'"');
    28. }else{                            //其他
    29.         header('Content-Disposition: attachment; filename="'.$filename.'"');
    30. }
    31. //-------------------------txt文件中内容
    32. ob_clean();
    33. flush();
    34. readfile($filename);
    35. echo '测试一';
    36. exit;
    37. ?>
    复制代码

    本帖被以下淘专辑推荐:

    Highcharts 中文网论坛管理团队

    我们提供:商业授权技术支持图表定制VIP服务 等相关支持服务
    在线客服:2133220776(QQ,非技术,工作日 10:00 ~ 17:00)
    新浪微博:http://weibo.com/highcharts
  • TA的每日心情
    开心
    2015-7-20 17:05
  • 签到天数: 18 天

    [LV.4]偶尔看看III

    3

    主题

    9

    帖子

    443

    积分

    HC 熟手

    Rank: 2

    积分
    443
    QQ
    发表于 2013-10-10 16:29:11 | 显示全部楼层
    学习下, 顶个
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    快速回复 返回顶部 返回列表