PHP解决ie类浏览器下载中文名乱码问题

      发布在:后端技术      评论:0 条评论

在 PHP 中,可以使用 `header` 函数来设置响应头,包括 `Content-Disposition` 头。该头用于指示浏览器如何处理响应内容,包括是否将其保存为文件,并指定保存文件时的文件名。

然而,在 IE 浏览器中,由于其对文件名编码的特殊要求,如果文件名包含中文等非 ASCII 字符,可能会出现乱码或不被识别的情况。

解决这个问题,可以借助 `urlencode` 或 `rawurlencode` 函数对文件名进行 URL 编码,以确保其符合 URL 规范,然后将编码后的文件名通过响应头传送给浏览器。例如:

$filename = "中文名.cdr";
$encodedFilename = urlencode($filename);
header("Content-Disposition: attachment;filename=\"$encodedFilename\"");

或者:

$filename = "中文名.cdr";
$encodedFilename = rawurlencode($filename);
header("Content-Disposition: attachment;filename=\"$encodedFilename\"");

这样处理之后,IE 浏览器就可以正确地识别和保存文件名了。需要注意的是,其他浏览器也可以正确地处理 URL 编码后的文件名,因此这种处理方法通常对所有浏览器都适用。

实际案例代码

function wpdown()

    {

        $id = isset($_GET['id']) ? $_GET['id'] : 0;

        if(!$id) {

            $this->error('非法下载');

        }

        $where['id'] = $id;

        $row = M('wpfile')

            ->where($where)->find();

        if(empty($row['url'])) {

            $this->error('数据不存在');

        }

        $realFile=SITE_PATH.trim($row['url'],'/');

        if(is_file($realFile)) {

            //  文件类型,作为头部发送给浏览器

            $filesize = $row['file_size'];

            $timestamp = time();

            ob_end_clean();

            header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $timestamp + 86400) . ' GMT');

            header('Expires: ' . gmdate('D, d M Y H:i:s', $timestamp + 86400) . ' GMT');

            header('Cache-control: max-age=86400');

            header('Content-Encoding: none');

            $encodedFilename = urlencode($row['original_name']);

            header("Content-Disposition: attachment; filename=\"{$encodedFilename}\"");

//            header("Content-type: application/vnd.corel-draw");

            header("Content-Transfer-Encoding: binary");

            $filesize && header("Content-Length: $filesize");

            $i = 1;

            while (!@readfile($realFile)) {

                if (++$i > 3) break;

            }

            exit;

        }

        $this->error('下载失败');

    }


相关文章
热门推荐