`
jdluojing
  • 浏览: 18009 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

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; 
} 
方法三: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; 

分享到:
评论

相关推荐

    php中强制下载文件的代码(解决了IE下中文文件名乱码问题)

    通过上述知识点的梳理,我们可以了解到在PHP中实现文件下载以及处理IE下中文文件名乱码问题的原理和方法。正确的编码方式和HTTP头部信息设置对确保跨浏览器兼容性和下载功能正常工作至关重要。同时,在进行这类操作...

    php做下载文件的实现代码及文件名中乱码解决方法

    在PHP中实现文件下载功能,通常...通过上述知识点的详细解释,我们可以看到实现PHP下载文件功能以及解决文件名乱码问题,需要对HTTP协议有一定的了解,并且要注意编码规范的应用,以确保在不同浏览器中都能正常工作。

    解析如何在PHP下载文件名中解决乱码的问题

    综合上述,当需要在PHP脚本中处理下载文件名乱码时,应当检测客户端浏览器的类型,并针对不同浏览器应用不同的编码处理。以下是一个改进的PHP脚本示例: ```php $filename = "中文文件名.txt"; $ua = $_SERVER[...

    跨浏览器PHP下载文件名中的中文乱码问题解决方法

    在PHP编程中,当涉及到跨浏览器的文件下载时,可能会遇到中文文件名显示为乱码的问题。这个问题主要是由于不同浏览器对文件名编码处理方式的差异所导致的。本文将详细介绍如何通过PHP解决这一问题。 首先,我们需要...

    PHP附件下载中文名称乱码的解决方法

    在PHP开发过程中,当涉及到文件下载功能,尤其是文件名包含中文字符时,常常会遇到中文乱码的问题。这是因为浏览器和服务器之间对非ASCII字符的处理方式不同,导致在传输过程中出现编码不一致的情况。本文将详细讲解...

    PHP 强制下载文件代码

    复制代码 代码如下: &lt;?php $filename = ‘1.png... 您可能感兴趣的文章:php中强制下载文件的代码(解决了IE下中文文件名乱码问题)php强制下载类型的实现代码IE php关于强制下载文件的代码php 强制下载文件实现代码

    PHP IE中下载附件问题解决方法

    2. **中文文件名乱码**:对于包含中文字符的文件名,IE浏览器在下载时如果不进行编码处理,可能会显示为乱码。这时我们需要使用`urlencode`函数对文件名进行编码。 针对以上问题,以下是一些示例代码,展示了如何...

    php download.php实现代码 跳转到下载文件(response.redirect)

    - 对于IE浏览器的中文文件名乱码问题,需要特殊处理编码。 - 强制下载文件,可以使用`Content-Disposition: attachment`头信息,配合文件名参数,使浏览器以附件形式下载文件。 - FTP下载可以通过FTP扩展实现,...

    php下载文件的代码示例

    1. **处理中文文件名**:在某些情况下,尤其是在IE浏览器中,中文文件名可能会出现乱码。这通常可以通过编码文件名来解决,例如使用`iconv`函数将中文转换为UTF-8,并添加`BOM`头来标识编码。 2. **保存到本地**:...

    php导出csv数据在浏览器中输出提供下载或保存到文件的示例

    对于IE浏览器,还需处理中文文件名乱码问题。 ```php header("Content-type:text/csv;"); header("Content-Disposition:attachment;filename=" . $file_name); header('Cache-Control:must-revalidate,post-check=0...

    KODExplorer 芒果云-资源管理器

    - 文件下载,支持大文件下载、断点续传。 - 解决更改排序方式后 ——对应右键菜单不同步问题。 - 优化右键更改列表状态,同步保存配置到服务端。 - 文件浏览器打开(a点击新窗口跳转,a不支持click,用子元素冒泡来...

    基于php下载文件的详解

    在PHP中,下载文件是一项常见的任务,特别是在Web开发中。当用户访问特定的URL时,服务器需要能够提供一个文件供用户下载,而不是直接在浏览器中显示。为了实现这个功能,我们需要理解HTTP协议、PHP的输出控制函数...

    WebFTP(支持ZIP在线解压) v2.5.1

    1、修复IE浏览器下载文件名乱码 2、修复IE6浏览器无法下载的问题 *商业版-&gt;个人版,企业版升级到3.x,其中企业版添加管理中心,可添加多用户 功能简介 目录:剪切、复制、粘贴、删除、压缩、打包下载、权限设置、...

    fckeditor 2.6.3 PHP 精简优化版(附使用说明)

    修复了"**图片上传乱码问题**"意味着在之前的版本中,当用户尝试上传图片时,文件名可能会出现乱码,导致图片无法正常显示或保存。这个问题在2.6.3中得到了解决,现在图片上传过程将保持文件名的正确性,确保图片...

Global site tag (gtag.js) - Google Analytics