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

本文涉及的产品
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
简介:

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应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
Java 数据库 Spring
【异常】because it is a JDK dynamic proxy that implements
【异常】because it is a JDK dynamic proxy that implements
502 0
|
人工智能 Java Serverless
【MCP教程系列】搭建基于 Spring AI 的 SSE 模式 MCP 服务并自定义部署至阿里云百炼
本文详细介绍了如何基于Spring AI搭建支持SSE模式的MCP服务,并成功集成至阿里云百炼大模型平台。通过四个步骤实现从零到Agent的构建,包括项目创建、工具开发、服务测试与部署。文章还提供了具体代码示例和操作截图,帮助读者快速上手。最终,将自定义SSE MCP服务集成到百炼平台,完成智能体应用的创建与测试。适合希望了解SSE实时交互及大模型集成的开发者参考。
12147 60
|
4月前
|
JSON Shell API
查手机号归属地免费API接口教程
本接口提供手机号码归属地查询功能,支持获取号段、归属地省份/城市、运营商、区号、邮编等信息。请求地址为 `https://cn.apihz.cn/api/ip/shouji.php`,支持 POST 或 GET 方式调用,需提供 `id`、`key` 和 `phone` 参数。返回包含归属地信息及运营商等数据,适用于手机号归属查询场景。
|
程序员
【工具使用】Intellij IDEA 自动清除无效 import 包 和 清除无效 import包 的快捷键
【工具使用】Intellij IDEA 自动清除无效 import 包 和 清除无效 import包 的快捷键
3709 0
|
SQL 安全 关系型数据库
MySQL安全性:防止攻击和保护数据
MySQL安全性:防止攻击和保护数据
935 1
简单易操作 VsCoe离线安装插件【步骤+图片+插件】
这篇文章介绍了在Visual Studio Code (VSCode) 中进行离线安装插件的详细步骤,包括如何下载插件、以SVN插件为例的离线安装过程、通过命令行安装以及一个更加简单的离线安装方式,还提供了操作界面的截图帮助理解。
简单易操作 VsCoe离线安装插件【步骤+图片+插件】
em/px/rem/vh/vw区别
【10月更文挑战第24天】理解和掌握 em、px、rem、vh、vw 这几种单位的特点和应用,能够帮助我们更好地进行网页设计和布局,实现更优秀的用户体验和适应不同屏幕尺寸的能力。
|
设计模式 算法 PHP
PHP中的设计模式:策略模式的深入解析与应用
【10月更文挑战第8天】 在软件开发的浩瀚宇宙中,设计模式如同星辰指引,照亮了代码设计与架构的航道。本文旨在深入探索PHP语境下策略模式(Strategy Pattern)的精髓,不仅剖析其内核原理,还将其融入实战演练,让理论在实践中生根发芽。策略模式,作为解决“如何优雅地封装算法族”的答案,以其独特的灵活性与扩展性,赋予PHP应用以动态变换行为的能力,而无需牵动既有的类结构。
155 2
el-cascader组件实现点击、递归勾选联动子集children所有选项被选中。
el-cascader组件实现点击、递归勾选联动子集children所有选项被选中。
|
SQL Java 数据库连接
成功解决:was not registered for synchronization because synchronization is not active
这篇文章是关于解决Mybatis在同步过程中出现"was not registered for synchronization because synchronization is not active"错误的技术博客。
成功解决:was not registered for synchronization because synchronization is not active