urlencode可以解决下载文件名中文乱码问题, 但有时如果文件名含有空格字符, urlencode编码后的字符串会出现加号,
故需要将空格去掉!而有一种方法可以不把空格去掉,需要在输出文件名时把+替换成%20,即可以得到正常的文件名了!
$file = "例 子 example 1.rar";
$realname = "例 子 example 1.rar";
$realname = str_replace(" ","",$realname); //去掉英文空格
$str=str_replace(chr(32),"",$str); //去掉中文空格
$str=str_replace(chr(161),"",$str); //去掉中文空格
$realname = str_replace(chr(227),"",$realname); //去掉utf-8空格
或者用正则表达式来完成空格的替换:
$realname = preg_replace("/[[:space:]]/","",$realname);
$realname = ereg_replace("[[:space:]]","",$realname);
$fp=fopen($file,"r");
header("content-type: application/octet-stream");
header("accept-ranges: bytes");
header("content-length: ".filesize("$file_path"));
header("content-disposition: attachment;"."filename= ".urlencode($realname)); //url编码文件名,正确显示中文名称
header("content-disposition: attachment;"."filename= ".str_replace("+","%20",urlencode($realname))); //替换加号
echo fread($fp,filesize("$file_path")); //读取文件
fclose($fp);
exit;
转 载:DavidYanXW