php ie下载文件名乱码的解决办法:1、通过header方法解决乱码;2、通过“function remote_filesize($uri,$user='',$pw='') {...}”等方法解决乱码。
推荐:《php视频教程》
php文件下载ie文件名乱码问题
一直用chrome浏览器,没发现问题。今天用ie6,发现文件下载时文件名乱码,ie下迅雷下载文件名也是乱码。网上查了下说在ie下需要使用urlencode编码一下,我试了下
header('content-disposition: attachment; filename='. rawurlencode($file_name);结果用ie下载还是乱码。php文件本身是gbk/gb2312编码,于是我先将$file_name转换成utf-8编码再进行urlencode
header('content-disposition: attachment; filename='. rawurlencode(iconv(gbk,utf-8,$file_name)));这样使用ie下载就没问题了,难道urlencode只能对utf-8进行转义编码?
还有就是获取远程文件的大小问题,php中的filesize函数只能对本地文件进行处理,处理远程文件会失败并发出一条警告,并且在windows平台传入的参数必须是gbk/gb2312编码,使用utf-8编码将无法访问系统中的资源。
在网上找了四种获取远程文件大小的方法,多谢前辈们的分享,记录一下:
方法一:header
<?php get_headers($url,true); //返回结果 array ( [0] => http/1.1 200 ok [date] => sat, 29 may 2004 12:28:14 gmt [server] => apache/1.3.27 (unix) (red-hat/linux) [last-modified] => wed, 08 jan 2003 23:11:55 gmt [etag] => "3f80f-1b6-3e1cb03b" [accept-ranges] => bytes [content-length] => 438 [connection] => close [content-type] => text/html ) ?>
这里可以根据content-length直接获取大小了。
方法二:curl
function remote_filesize($uri,$user='',$pw='') { // start output buffering ob_start(); // initialize curl with given uri $ch = curl_init($uri); // make sure we get the header curl_setopt($ch, curlopt_header, 1); // make it a http head request curl_setopt($ch, curlopt_nobody, 1); // if auth is needed, do it here if (!emptyempty($user) && !emptyempty($pw)) { $headers = array('authorization: basic ' . base64_encode($user.':'.$pw)); curl_setopt($ch, curlopt_httpheader, $headers); } $okay = curl_exec($ch); curl_close($ch); // get the output buffer $head = ob_get_contents(); // clean the output buffer and return to previous // buffer settings ob_end_clean(); echo '<br>head-->'.$head.'<----end <br>'; // gets you the numeric value from the content-length // field in the http header $regex = '/content-length:\s([0-9].+?)\s/'; $count = preg_match($regex, $head, $matches); // if there was a content-length field, its value // will now be in $matches[1] if (isset($matches[1])) { $size = $matches[1]; } else { $size = 'unknown'; } //$last=round($size/(1024*1024),3); //return $last.' mb'; return $size; } 方法三:fsockfunction getfilesize($url) { $url = parse_url($url); if($fp = @fsockopen($url['host'],emptyempty($url['port'])?80:$url['port'],$error)) { fputs($fp,"get ".(emptyempty($url['path'])?'/':$url['path'])." http/1.1\r\n"); fputs($fp,"host:$url[host]\r\n\r\n"); while(!feof($fp)) { $tmp = fgets($fp); if(trim($tmp) == '') { break; } elseif(preg_match('/content-length:(.*)/si',$tmp,$arr)) { return trim($arr[1]); } } return null; } else { return null; } } 方法四:file_get_contents$fcont = file_get_contents("http://www.cnmiss.cn/"); echo strlen($fcont)/1024;
以上就是php ie下载文件名乱码怎么办的详细内容。