html表单 传递 符号,HTML源码中 form 标签的 enctype 属性
定義:enctype 屬性規(guī)定在發(fā)送到服務(wù)器之前應(yīng)該如何對表單數(shù)據(jù)進(jìn)行編碼。默認(rèn)地,表單數(shù)據(jù)會編碼為 “application/x-www-form-urlencoded”。即在發(fā)送到服務(wù)器之前,所有字符都會進(jìn)行編碼(空格轉(zhuǎn)換為 “+” 加號,特殊符號轉(zhuǎn)換為 ASCII HEX 值)。
屬性值:
大家應(yīng)該清楚在通過POST方式向服務(wù)器發(fā)送AJAX請求時,需要指定請求頭Content-Type為application/x-www-form-urlencoded編碼類型;表單上傳文件時,需要指定請求頭Content-Type為”multipart/form-data”;純文本傳輸時,為防止接收數(shù)據(jù)時出現(xiàn)編碼混亂,需要指定請求頭Content-Type為”text/plain”。
以下為三者的區(qū)別:
> application/x-www-form-urlencoded
該屬性值是通過表單發(fā)送數(shù)據(jù)時默認(rèn)的編碼類型,如果未在HTML的from標(biāo)簽中設(shè)置enctype屬性,則默認(rèn)值就是application/x-www-form-urlencoded。設(shè)置該屬性值后,會將表單中發(fā)送的數(shù)據(jù)編碼為“名稱/值”對,這是標(biāo)準(zhǔn)的編碼格式。當(dāng)表單的Action為POST時,瀏覽器會將表單數(shù)據(jù)封裝到http請求的body中,然后發(fā)送到服務(wù)器。當(dāng)表單的Action為GET時,會將表單中發(fā)送的數(shù)據(jù)轉(zhuǎn)換成一個字符串(name1=value1&name2=value2),然后把該字符串附加到URL后面,并用?分割,接著就請求這個新的URL。
> multipart/form-data
在向服務(wù)器發(fā)送大量的文本、包含非ASCII字符的文本或二進(jìn)制數(shù)據(jù)時,“application/x-www-form-urlencoded”這種編碼方式效率比較低。因此在文件上傳時,所使用的編碼類型是“multipart/form-data”,它既可以發(fā)送文本數(shù)據(jù),也支持二進(jìn)制數(shù)據(jù)上傳。
瀏覽器端表單的Enctype屬性值設(shè)置為multipart/form-data時,則表示傳輸?shù)臄?shù)據(jù)要用到多媒體傳輸協(xié)議,由于多媒體傳輸?shù)亩际谴罅康臄?shù)據(jù),所以規(guī)定上傳文件必須是POST方法,的type屬性必須是file。(表單里有圖片上傳也需要設(shè)置Enctype=”multipart/form-data”)。如下:
表單標(biāo)簽中設(shè)置enctype=”multipart/form-data”來確保匿名上載文件的正確編碼。如下:
上傳頭像圖片:td>td>tr>
當(dāng)表單中有file類型控件時,如果希望它能正常工作,則必須設(shè)置Enctype為”multipart/form-data”,此時瀏覽器會將整個表單以控件為單位分割,并為每個部分加上Content-Disposition(form-data或者file),Content-Type(默認(rèn)為text/plain),name(控件name)等信息,并加上分割符(boundary)。
注:enctype=”multipart/form-data”是上傳二進(jìn)制數(shù)據(jù); form里面的input的值以2進(jìn)制的方式傳過去。
form里面的input的值以2進(jìn)制的方式傳過去,所以request就得不到值了。 也就是說加了這段代碼,用request就會傳遞不成功,取表單值加入數(shù)據(jù)庫時,用到下面的:
//新建一個SmartUpload對象
SmartUpload su = new SmartUpload();
//取數(shù)組值
su.getRequest().getParameterValues();
//取單個參數(shù)單個值
su.getRequest().getParameter( );
> text/plain
數(shù)據(jù)以純文本形式進(jìn)行編碼,其中不含任何控件或格式字符
> 關(guān)于”application/x-www-form-urlencoded”和”multipart/form-data”的消息區(qū)別
可以看下面的例子:
這是一個表單,有2個表單域:name和email
---------------------------------------------
| field value |
| name: ryan ou |
| email: ryan@rhythmtechnology.com |
---------------------------------------------
在 application/x-www-form-urlencoded 消息中:
//不同的field會用"&"符號連接;空格被替換成"+";field和value間用"="聯(lián)系等等
name=ryan+ou&email=ryan@rhythmtechnology.com
在multipart/form-data 消息中:
//每個field被分成小部分,而且包含一個value是"form-data"的"Content-Disposition"的頭部;一個"name"屬性對應(yīng)field的ID等等
-----------------------------7cd1d6371ec
Content-Disposition: form-data; name="name"
ryan ou
-----------------------------7cd1d6371ec
Content-Disposition: form-data; name="email"
ryan@rhythmtechnology.com
-----------------------------7cd1d6371ec
Content-Disposition: form-data; name="Logo"; filename="D:\My Documents\My Pictures\Logo.jpg"
Content-Type: image/jpeg
總結(jié)
以上是生活随笔為你收集整理的html表单 传递 符号,HTML源码中 form 标签的 enctype 属性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机网络实验仿真系统设计,计算机网络实
- 下一篇: 2014年12月福建省高等学校计算机应用