HTTP下載文件名稱編碼說明


HTTP下載保存文件名

下載文件需要保存的名稱 在響應報文頭中 Content-Disposition 響應報文頭域中指定, 例如
Content-Disposition: attachment; filename*="utf8''%E4%B8%AD%E6%96%87%20%E6%96%87%E4%BB%B6%E5%90%8D.txt"

其中filename后指定文件名稱。

HTTP規范要求

  http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html

        content-disposition = "Content-Disposition" ":"
                              disposition-type *( ";" disposition-parm )
        disposition-type = "attachment" | disp-extension-token
        disposition-parm = filename-parm | disp-extension-parm
        filename-parm = "filename" "=" quoted-string
        disp-extension-token = token
        disp-extension-parm = token "=" ( token | quoted-string )

An example is

        Content-Disposition: attachment; filename="fname.ext"

 

參考 http://haoyu.farbox.com/post/download-header
http://www.phpv.net/html/1675.html
http://blog.angryfox.com/?tag=%E4%B8%8B%E8%BD%BD
 

兼容性規則

各個瀏覽器實現的規則又和HTTP規范有些小差異。

給出轉碼規則代碼:

-- 獲取文件名
local filename = cgilua.QUERY.IF_FILENAMEUTF8
local encfilename = cgilua.urlcode.escape(filename)
encfilename = string.gsub (encfilename, "+", "%%20") -- tested '中文文 件名.txt'

local useragent = sapi.Request.servervariable"HTTP_USER_AGENT" local contentdisposition if useragent then if string.match( useragent, "MSIE" ) -- IE11 偽裝成 mozilla, 需要借助Trident關鍵字區分 or string.match( useragent, "Trident" ) then contentdisposition = 'attachment; filename="' .. encfilename .. '"' elseif string.match( useragent, "/Firefox/" ) then contentdisposition = "attachment; filename*=\"UTF-8''"..encfilename.."\"" else contentdisposition = 'attachment; filename="' .. filename .. '"' end else contentdisposition = 'attachment; filename="' .. filename .. '"' end

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM