為了正確編碼和解碼表單數(shù)據(jù),form元素定義一個enctype屬性,該屬性可以定義表單數(shù)據(jù)的編碼類型。常用類型包括兩種,說明如下,另外還可以設(shè)置text/plain類型,以直接字符形式進行傳遞,該類型不常用。
?application/x-www-form-URLencoded
application/x-www-form-URLencoded是默認編碼類型。表單數(shù)據(jù)被編碼為“名/值”對的形式(這是標準的編碼格式)。
這種編碼方式將空格用“+”代替,非字母和數(shù)字字符用以“%hh”表示的該字符的ASCII編碼代替(漢字就是這種形式),而變量和值使用“=”連接在一起,各個變量和值對之間使用“&”連接。通過這種方式把表單中輸入的數(shù)據(jù)進行打包,并發(fā)送到服務(wù)器端。
application/x-www-form-URLencoded編碼方式不能傳遞二進制數(shù)據(jù)流,不適合文件上傳,它只能提交符合ASCII編碼的文本字符串。
?multipart/form-data
multipart/form-data編碼可以把表單數(shù)據(jù)編碼為多條消息,其中每個表單域?qū)?yīng)一個消息塊。這種方式傳輸?shù)南艘幌盗械臄?shù)據(jù)塊,每一個數(shù)據(jù)塊代表表單中的一個表單域變量,并且數(shù)據(jù)塊的排列順序與頁面中表單域的排列順序是一一對應(yīng)的。數(shù)據(jù)塊與數(shù)據(jù)塊之間使用特殊字符分隔。
multipart/form-data編碼方式可以用來傳輸二進制數(shù)據(jù)或者非ASCII字符的文本(如圖片、不同格式的文件等)。請注意,只有使用multipart/form-data方式,才能完整地傳遞文件數(shù)據(jù)。但是這種編碼方式在客戶端和服務(wù)器端都會有很多限制。
提示:multipart/form-data編碼方式,必須使用POST方法,GET方法無法處理這樣的表單數(shù)據(jù)。