解决php输出文件下载时文件名含中文时出现乱码

解决php输出文件下载时文件名含中文时出现乱码

2011-10-19

接前篇 前篇提到了用php生成网页快捷方式 进行下载 但是却存在一个文件名乱码的问题

php下载时,用一个header可以确定保存为的名字:

header( ‘Content-Disposition: attachment; filename=”‘.$saved_name.’”‘ );//$saved_name存为的名字

但是如果是中文的话,在ie下是乱码。其他浏览器是正常的。

这时候,需要urlencode($saved_name),ie下可以保存为正常的中文名字了。

但是其他浏览器在url编码时候不会自动解码。

这时候就要靠判断浏览器类型了了:

if(strpos($_SERVER['HTTP_USER_AGENT'],”MSIE”))
header( ‘Content-Disposition: attachment; filename=”‘.urlencode($this->saved_name).’”‘ );//如果是ie存为的名字要urlencode
else

header( ‘Content-Disposition: attachment; filename=”‘.$this->saved_name.’”‘ );//存为的名字

这样就可以解决这个问题。

另附一个网上看到的一个输出文件的例子:

header( “Pragma: public” );

header( “Expires: 0″ ); // 一定要设置不缓存哦。

header( “Cache-Component: must-revalidate, post-check=0, pre-check=0″ );

header( “Content-type:”.$mineType );

header( “Content-Length: ” . filesize( $path) );

if(strpos($_SERVER['HTTP_USER_AGENT'],”MSIE”))

header( ‘Content-Disposition: attachment; filename=”‘.urlencode($saved_name).’”‘ );//如果是ie存为的名字要urlencode

else header( ‘Content-Disposition: attachment; filename=”‘.$saved_name.’”‘ );//存为的名字

header( ‘Content-Transfer-Encoding: binary’ );

readfile( $path);//读取并输出

转载于:https://www.cnblogs.com/holyes/archive/2013/05/22/da050f03ffb03e6913806567e9f1e824.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值