TA的每日心情 | 衰 2018-4-10 08:53 |
---|
签到天数: 291 天 [LV.8]以坛为家I
管理员
情深缘浅
  
- 积分
- 6737
 

|
昨日群内有一朋友遇到这样的问题。由于以前我也没弄过中文文件名,今天所以研究下。在网上看了下。发现这方法不错。
主要原理,就是判断当前浏览器类型,根据浏览器输出不同url编码的汉字名称。
方法还不错,我测了下,火狐,IE, 谷歌浏览器,opera,汉字名称正常。不过IE下有发现个问题,两种编码名称,具体使用哪种需要看情况。- <?php
- // 下载文件,中文文件名,乱码解决方案,兼容各种浏览器
- ob_start();
- $ua = $_SERVER["HTTP_USER_AGENT"];
- $filename ="测试文件.txt"; //文件名
- $encoded_filename = urlencode($filename); //对汉字名称编码
- $encoded_filename = str_replace("+", "%20", $encoded_filename);
- /*
- * %20 代表 空格
- *
- str_replace() 函数使用一个字符串替换字符串中的另一些字符。
- 语法
- str_replace(find,replace,string,count)
- 参数 描述
- find 必需。规定要查找的值。
- replace 必需。规定替换 find 中的值的值。
- string 必需。规定被搜索的字符串。
- count 可选。一个变量,对替换数进行计数。
- */
- header('Content-Type: application/octet-stream');
- //-------- IF判断浏览器类型
- // preg_match 执行一个正则表达式匹配
- if (preg_match("/MSIE/", $ua)){ // IE
- //header('Content-Disposition: attachment; filename="'.urldecode($encoded_filename).'"'); //具体需测试
- header('Content-Disposition: attachment; filename="'.$encoded_filename.'"');
- }else if (preg_match("/Firefox/", $ua)){ //火狐
- header('Content-Disposition: attachment; filename*="utf-8\'\''.$filename.'"');
- }else{ //其他
- header('Content-Disposition: attachment; filename="'.$filename.'"');
- }
- //-------------------------txt文件中内容
- ob_clean();
- flush();
- readfile($filename);
- echo '测试一';
- exit;
- ?>
复制代码 |
|