php IE download file name garbled solution: 1. Solve the garbled code through the header method; 2. Through "function remote_filesize($uri,$user='',$pw='') {... }" and other methods to solve the garbled characters.
Recommended: "PHP Video Tutorial"
php file download IE file name garbled Question
I have been using Chrome browser and no problem has been found. I used IE6 today and found that the file name was garbled when downloading the file, and the file name downloaded from Thunder under IE was also garbled. I checked online and said that I need to use urlencode to encode it in IE. I tried
header('Content-Disposition: attachment; filename='. rawurlencode($file_name); and the result was still garbled when I downloaded it. The php file itself is gbk/gb2312 encoded, so I first converted $file_name to utf-8 encoding and then urlencode
header('Content-Disposition: attachment; filename='. rawurlencode(iconv("GBK" ,"UTF-8",$file_name))); In this way, there is no problem in downloading using IE. Can urlencode only escape encoding for utf-8?
There is also the problem of obtaining the size of the remote file , the filesize function in PHP can only process local files. Processing remote files will fail and issue a warning, and the parameters passed in on the Windows platform must be gbk/gb2312 encoding. Using UTF-8 encoding will not be able to access the system. Resources.
I found four ways to get the size of remote files on the Internet. Thank you seniors for sharing. Record them:
Method 1: header
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 ) ?>
Here you can follow Content-Length directly obtains the size.
Method 2: 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 '
head-->'.$head.'<----end
'; // 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; } 方法三:fsock function 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;
The above is the detailed content of What to do if the file name downloaded by PHP IE is garbled. For more information, please follow other related articles on the PHP Chinese website!