之前通过sdcms做过一个网站,最近在上传文件时,总是提示,该文件不允许被上传。于是跟踪了一下,发现了一个bug
上传附近是通过admin目录下的Sdcms_Editor_Up.asp来提交的,当文件名中含有.时,就会出错,如小燕子 2.53秒.rar
跟踪发现它使用的风声组件上传,在inc/upload.asp中的第166行,取文件扩展名方法
if Instr(strFnam,".")<>0 then
strFext=Mid(strFnam,InstrRev(strFnam,".")+1)
else
strFext=""
end if
strFext=Mid(strFnam,InstrRev(strFnam,".")+1)
else
strFext=""
end if
InstrRev是取最后一次出现的位置,理论上像小燕子 2.53秒.rar这样的文件名没有问题。
再跟踪发现,它的默认编码是gb2132,Sdcms_Editor_Up.asp上传使用的编码也是bg2132,于是像小燕子 2.53秒.rar这样的文件名,就会变成乱码,如****.?*rar这样的,取到的扩展名是?*rar,所以程序报错,总是提示,该文件不允许被上传。
将上传编码改成utf-8,问题解决(UpLoad.Charset="utf-8")。