因为新的explorer 10的user-agent在截取时有问题,致使IPB下载附件时,不能正常的判断在IE10环境下,浏览器是不是explorer,所以在下载类中判断时将IE10定义为其它类型的浏览器,附件文件名没有进行rawurlencode处理,导致中文文件名乱码
解决办法:
打开目录文件:
public/admin/applications/core/sources/classes/attach/class_attach.php
查找:
$disposition = $attach['attach_is_image'] ? "inline" : "attachment";
下面的IF语句的意思是
如果是chorome或者opera,将文件名指定charset后进行rawurlencode编码
否则,如果是explorer,将直接进行rawurlencode编码
,,,否则,不进行编码
问题就是第三句,因为不能判断IE10为Explorer,所以没有进行编辑,将第三句由:
@header( 'Content-Disposition: ' . $disposition . '; filename="' . IPSText::UNhtmlspecialchars( $attach['attach_file'] ) . '"' );
修改为:
@header( 'Content-Disposition: ' . $disposition . '; filename="' . rawurlencode( IPSText::UNhtmlspecialchars( $attach['attach_file'] ) ) . '"' );
即可
我的IPB版本为3.4.4,也许下个版本修正了user-agent判断后,就不用修改此文件了
IP.downloads也是这个处理办法,处理文件是:
public/admin/applications_addon/ips/downloads/modules_public/display/download.php