application/json和application/x-www-form-urlencoded都是表單數據發送時的編碼類型。php
EncType:html
enctype 屬性規定在發送到服務器以前應該如何對錶單數據進行編碼。json
默認地,表單數據會編碼爲 "application/x-www-form-urlencoded"。就是說,在發送到服務器以前,全部字符都會進行編碼。數組
application/x-www-form-urlencoded編碼類型的發送和接收瀏覽器
窗體數據被編碼爲名稱/值對服務器
客戶端:app
發送"test=I'm Egret",瀏覽器按F12,Network中查看發送數據post
服務端:編碼
1. 用file_get_contents拿Post數據。$_POST['test']取不到數據。url
2. 而後使用json_decode解碼。 原始file_get_contents是字符串?
3. php中json訪問方式 $json->test。php中沒有{test:"I'm Client"}這種格式的,$json = {test:"I'm Client"}會報錯。
4. 返回數據時將數組json_encode編碼。php中json格式沒有,用數組代替。
使用json格式,php頭部須要加上以下代碼,不然會報錯。
header('Access-Control-Allow-Headers:x-requested-with,content-type');
application/x-www-form-urlencoded: 窗體數據被編碼爲名稱/值對。這是標準的編碼格式。
multipart/form-data: 窗體數據被編碼爲一條消息,頁上的每一個控件對應消息中的一個部分。
text/plain: 窗體數據以純文本形式進行編碼,其中不含任何控件或格式字符。
form的enctype屬性爲編碼方式,經常使用有兩種:application/x-www-form-urlencoded和multipart/form-data,默認爲application/x-www-form-urlencoded。
當action爲get時候,瀏覽器用x-www-form-urlencoded的編碼方式把form數據轉換成一個字串(name1=value1&name2=value2...),而後把這個字串append到url後面,用?分割,加載這個新的url。
當action爲post時候,瀏覽器把form數據封裝到http body中,而後發送到server。
若是沒有type=file的控件,用默認的application/x-www-form-urlencoded就能夠了。
可是若是有type=file的話,就要用到multipart/form-data了。瀏覽器會把整個表單以控件爲單位分割,併爲每一個部分加上Content-Disposition(form-data或者file)、Content-Type(默認爲text/plain)、name(控件name)等信息,並加上分割符(boundary)。