使用 iconv 将文件名从 utf-8 转码为 gbk,并配合 content-disposition 响应头实现强制下载。调用 iconv('utf-8', 'gbk//ignore', $filename) 处理文件名,设置 content-type: application/octet-stream 和 content-disposition: attachment; filename=... 即可触发浏览器下载行为。

如何配置 HTTP 响应头以触发文件下载
通过设置特定的 HTTP 响应头,可以告诉浏览器不要尝试在页面中渲染文件,而是将其作为附件保存。需要设置 Content-Type 为 application/octet-stream 以表示二进制流,设置 Content-Length 指定文件大小,并设置 Content-Disposition 为 attachment 模式。

header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $filename);
header('Content-Length: ' . filesize($filepath));
readfile($filepath);
为什么 iconv 转码能解决中文文件名乱码
旧版 IE 或特定服务器环境可能默认使用 GBK 编码解析文件名。使用 iconv 将 UTF-8 字符串转换为 GBK 编码,可确保这些环境下文件名显示正确。若转换失败,可回退到 URL 编码方式。
立即学习“PHP免费学习笔记(深入)”;

$filename = '测试文件.txt';
$encoded = iconv('UTF-8', 'GBK//IGNORE', $filename);
if ($encoded === false) {
$encoded = rawurlencode($filename);
}
header('Content-Disposition: attachment; filename=' . $encoded);
基于程序中某个输入、条件或结果的具体问题
当文件名包含特殊字符或路径分隔符时,iconv 可能产生意外结果。需验证输入合法性,避免路径遍历漏洞。同时,readfile 会直接输出内容,需确保文件存在且可读。



















