解决Content-Disposition: 下载中文名乱码,下载乱码

简介:

header('Content-Disposition: attachment; filename*="'. $FileNname . '"');浏览器的不同导致PHP下载中文名乱码。

解决办法如下:

经测试,目前以兼容各主流浏览器。

 

 
  1. $lb_sourcefile_name=$_GET['sourcefile']; 
  2. $down_url=$_GET['operate']; 
  3. if($_GET['mykey']){ 
  4.     $mykey=$_GET['mykey']; 
  5.     $mykey=str_replace("_","+",$mykey);      
  6.     $mykey=base64_decode($mykey); 
  7.     if($mykey === '2013abcdefg2013lubansoft9527'){ 
  8.         $lb_sourcefile_name=str_replace("_","+",$lb_sourcefile_name);        
  9.         $lb_sourcefile_name=base64_decode($lb_sourcefile_name); 
  10.         $down_url=str_replace("_","+",$down_url); 
  11.         $down_url=base64_decode($down_url); 
  12.         $down_url='../lb/rename_file/'.$down_url
  13.         $ua = $_SERVER["HTTP_USER_AGENT"]; 
  14.         header('Content-Description: File Transfer'); 
  15.         header('Content-Type: application/octet-stream'); 
  16.         if (preg_match("/MSIE/"$ua)) { 
  17.             $lb_sourcefile_name = urlencode($lb_sourcefile_name); 
  18.             $lb_sourcefile_name = str_replace("+""%20"$lb_sourcefile_name);  
  19.             header('Content-Disposition: attachment; filename="' . $lb_sourcefile_name . '"'); 
  20.         }  
  21.         elseif (preg_match("/Firefox/"$ua)) { 
  22.             header('Content-Disposition: attachment; filename*="utf8\'\'' . $lb_sourcefile_name . '"'); 
  23.         }  
  24.         else { 
  25.             header('Content-Disposition: attachment; filename="' . $lb_sourcefile_name . '"'); 
  26.         } 
  27.         header('Content-Transfer-Encoding: binary'); 
  28.         header('Expires: 0'); 
  29.         header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
  30.         header('Pragma: public'); 
  31.         header('Content-Length: ' . filesize($down_url)); 
  32.         ob_clean(); 
  33.         flush(); 
  34.         readfile($down_url); 
  35.         exit
  36.     } 
  37.     else
  38.         die(404); 
  39.     } 


本文转自许琴 51CTO博客,原文链接:http://blog.51cto.com/xuqin/1158319 ,如需转载请自行联系原作者





相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
缓存 安全 Go
浅谈Golang线程安全的sync.Map
浅谈Golang线程安全的sync.Map
382 0
SpringMVC解决下载文件名乱码的问题
SpringMVC解决下载文件名乱码的问题
365 0
|
5月前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
本文介绍了Claude Code终端AI助手的使用指南,主要内容包括:1)常用命令如版本查看、项目启动和更新;2)三种工作模式切换及界面说明;3)核心功能指令速查表,包含初始化、压缩对话、清除历史等操作;4)详细解析了/init、/help、/clear、/compact、/memory等关键命令的使用场景和语法。文章通过丰富的界面截图和场景示例,帮助开发者快速掌握如何通过命令行和交互界面高效使用Claude Code进行项目开发,特别强调了CLAUDE.md文件作为项目知识库的核心作用。
50648 72
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
springboot 各种文件下载方式(最全)
springboot 各种文件下载方式(最全)
6620 0
什么是依赖倒置原则
依赖倒置原则(Dependency Inversion Principle, DIP)是面向对象设计中的SOLID原则之一,强调高层模块不应依赖低层模块,双方应依赖于抽象。该原则包含两方面:抽象不依赖细节,细节依赖抽象。这有助于降低耦合度、提高模块化和灵活性。实践中可通过接口定义契约、依赖注入等方式实现。例如,在Java中定义`MessageService`接口及其实现`EmailService`,高层`NotificationService`依赖于`MessageService`接口而非具体实现,从而实现了对扩展开放、对修改关闭的设计目标。
939 1
|
Web App开发 iOS开发
【Azure 应用服务】App Service站点Header头中的中文信息显示乱码?当下载文件时,文件名也是乱码?
【Azure 应用服务】App Service站点Header头中的中文信息显示乱码?当下载文件时,文件名也是乱码?
281 0
|
SQL Java 数据库连接
对 MyBatis Plus SaveBatch 调优提升25倍性能!!!
最近在压测一批接口,发现接口处理速度慢的有点超出预期,感觉很奇怪,后面定位发现是数据库批量保存这块很慢。这个项目用的是,批量保存直接用的是提供的 saveBatch。于是开始排查之路。所以如果有使用 jdbc 的 Batch 性能方面的需求,要将rewriteBatchedStatements 设置为 true,这样能提高很多性能。然后如果喜欢手动拼接 sql 要注意一次拼接的数量,分批处理。
1620 1
|
前端开发 对象存储 CDN
Hi gays, 你造Content-Disposition吗?
今天要和大家聊的就是导致这起线上问题的 Content-disposition 到底是何方神圣。