国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
你不知道的 頁面編碼,瀏覽器選擇編碼,get,post各種亂碼由來

asp.net頁面編碼和瀏覽器的選擇編碼

每個asp.net的朋友都知道,在新版本的visual studio,在沒有任何設置的情況下,新建頁面時的默認編碼為utf-8

我們可以從兩個地方可以看出:

第一:打開aspx頁面,“文件”->“高級保存選項”,如下圖,可以看出編碼為:Unicode(UTF-8帶簽名)

第二:找到aspx存放路徑,用系統(tǒng)自帶的文本編輯器打開,然后“文件”->"另存為",如下圖,可以看出編碼為UTF-8

很多時候我們有些疑問,我們經(jīng)常在aspx頁面的<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />強制把carset改為gb2312

然后我們在“文件”->“高級保存選項”,可以看出編碼為:GB2312(如果你前面把carset改為gb2312,vs會自動在高級保存選項中進行綁定改變),然后編譯運行后,右擊html“查看源”發(fā)現(xiàn)<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />沒有變化,這時候一切正常

下面以IE為例:我們以為此時 “右擊瀏覽器”->“編碼” 看到的是 瀏覽器會選中簡體中文(GB2312),但是事實上,你看到的還是選中的Unicode(UTF-8)  (再勾選了‘自動選擇’前提下)

現(xiàn)象已經(jīng)很明顯,但是需要驗證瀏覽器為何會這樣,F(xiàn)12調(diào)試瀏覽器(如下圖),我們發(fā)現(xiàn)content-type竟然是“text/html;charset=utf-8”!

 

這個現(xiàn)象至少說了兩個問題點:

1、asp.net機制至少在某個地方改變了response的ContentEncoding,導致雖然html頁面代碼上看到的設置<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />并沒有生效

2、瀏覽器再自動選擇編碼方式的時候不會優(yōu)先根據(jù)html源碼中的所展示的<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />代碼來決定選擇什么編碼方式,很明顯,以上的現(xiàn)象證明瀏覽器是優(yōu)先根據(jù)“響應標頭-response header”中的鍵為“Content-Type”的值來自動選擇判斷,導致html中的所看到的<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />形同虛設。

 

以上兩個問題點很快得到論證:

問題1、在任意新建一個測試頁面,在第一個“}”處設置斷點,然后命中斷點后再“即時窗口”中寫入“Response.ContentEncoding.EncodingName”,按enter執(zhí)行,輸出什么?沒錯:"Unicode (UTF-8)"

protected void Page_Load(object sender, EventArgs e)
{

}

如果了解asp.net生命機制的朋友知道,在執(zhí)行到Page_Load之前已經(jīng)執(zhí)行了很多潛在的初始化事件,類似:Page_Init,LoadViewState LoadPostData等等,可以想象一定是在某個地方系統(tǒng)為響應頁面指定修改了ContentEncoding的值,也就是“響應標頭-response header”中的鍵為“Content-Type”的值為“UTF-8”

我們不妨做一個測試,上面說過,我把<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />的carset改為gb2312,是沒有效果的,那么我如果在Page_Load事件中如下寫上代碼:

protected void Page_Load(object sender, EventArgs e)
{
            Encoding gb2312 = Encoding.GetEncoding("gb2312");
            Response.ContentEncoding = gb2312;
 }

即我在load事件中再次強制性把響應標頭中的“Content-Type”改為gb2312,那么瀏覽器表現(xiàn)如何呢?

這正是我們想看到的,我相信很多朋友有過中文亂碼的情況,我先不說具體亂碼的解決方案,但是至少搜索發(fā)現(xiàn)很多解決方案是在web.config下添加如下節(jié)點,即把網(wǎng)站內(nèi)所有網(wǎng)頁的請求編碼和響應編碼都改為utf-8

<system.web>
<globalization requestEncoding="utf-8" responseEncoding="utf-8" />
</system.web>

其實,上面案例其實只是單個頁面的修改response Encoding為gb2312,我們也可以在web.config中添加<globalization requestEncoding="gb2312" responseEncoding="gb2312" />,即整個網(wǎng)站有效

問題2、瀏覽器編碼方式是根據(jù)“響應標頭-response header”中的鍵為“Content-Type”的值來自動選擇判斷,而不會簡單的根據(jù)你在html中看到的標簽值<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />來判定,雖然這個標簽一般情況下會寫入header,但是有時候會被暗中修改掉,導致html中看到的和調(diào)試捕捉到的Content-Type不一致的情況

當然在老版本的ie中,有時候出現(xiàn)的頁面全部為空白,右擊ie瀏覽器編碼發(fā)現(xiàn)沒有勾選“自動選擇”的情況下會出現(xiàn)這種白屏現(xiàn)象,那不是本文討論的范圍,但是簡單的說下原因(拷貝):老版本的ie瀏覽器解析網(wǎng)頁編碼時以HTML內(nèi)的標簽優(yōu)先,而后才是HTTP header內(nèi)的訊息,而mozilla系列的瀏覽器則剛剛相反,由于UTF-8為3個字節(jié)表示一個漢字,而普通的GB2312或BIG5是兩個。頁面輸出時,由于上述原因,使瀏覽器解析、輸 出<title$amp;>amp;$lt;/title>的內(nèi)容時,如果在</title>前有奇數(shù)個全角字符時,IE把UTF-8當作兩 個字節(jié)解析時出現(xiàn)半個漢字的情況,這時該半個漢字會和</title>的<結(jié)合成一個亂碼字,導致IE無法讀 完<title>部分,使整個頁面為空百輸出。而這個時候如果察看源文件的話,會發(fā)現(xiàn)實際上整個葉面全部已經(jīng)輸出了

解決方法:將<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />放在<title>測試標題</title>之前(好像現(xiàn)在新建網(wǎng)頁默認都在title之前)

 

asp.net URL參數(shù)編碼

幾乎所有的朋友都會遇到中文情況下亂碼的問題,其原因到底是為何?

我先不說亂碼問題,先說get和post的區(qū)別,幾乎沒有人不知道

我們在新建asp.net頁面時,是很少去對form進行修改的,即保持默認的<form id="form1" runat="server">,可是編譯運行后查看代碼發(fā)現(xiàn)變成<form method="post" action="Default2.aspx" id="form1">

很顯然,asp.net默認會為form的method寫上post,但是需要注意的是如果僅僅是單純的html頁面,form默認的method是get

 

我這邊可以舉一個例子詮釋一些無關緊要但是又比較重要的東西:

情況1(post):

瀏覽器選擇編碼 :  utf-8

編譯前的aspx  :  <form id="form1"  runat="server">

運行后的html  :  <form id="form1" action="Default2.aspx" method="post">

點擊服務器按鈕(按鈕文本:阿道夫):F12在請求正文中有如下圖內(nèi)容

 

 情況2(get):

瀏覽器選擇編碼 :  utf-8

編譯前的aspx  :  <form id="form1"  runat="server" method="get">

運行后的html  :  <form id="form1" action="Default2.aspx" method="get">

點擊服務器按鈕(按鈕文本:阿道夫):F12在請求正文中有如下圖內(nèi)容

 

其實,情況1和情況2的對比,并不是我今天想說的意圖,但是我還是要稍微順帶說下:

1、我們可以看到get方式的提交,參數(shù)僅僅是拼接在url后面,然后直接向web服務器請求,所以我們圖中“請求標頭-request header”中就可以看到參數(shù)的值,而post可以從圖中看到,在“請求標頭”中并看不到值,而在“請求正文”中看到值,說明post提交時值是包裝在請求的body中,發(fā)送給服務器,然后向服務器請求數(shù)據(jù)

2、在asp.net中,圖中可以看到不管是get還是post,提交形式不一樣,內(nèi)容確是一樣的,本文僅為測試,所以內(nèi)容相對較少,但是看起來也非常的長了,如果用get提交方式,這就帶來隱患,瀏覽器到底支持多長的uri,web服務器到底支持多長的uri,反正是有限制的(具體長度見:http://www.cnblogs.com/henryhappier/archive/2010/10/09/1846554.html),不僅僅是長度,數(shù)據(jù)量也是有限制,get數(shù)據(jù)量較小,不能大于2KB。post傳送的數(shù)據(jù)量較大,一般被默認為不受限制。但理論上,web服務器載體例如iis應該會有限制,比如IIS5的post最大傳輸量為100kb等

3、安全性,get更加容易暴露參數(shù),而且會被保存在瀏覽器的歷史記錄中,但是對于稍微專業(yè)點的人來說,post請求傳送的數(shù)據(jù)也是可以被捕捉到的

4、緩存和seo優(yōu)化等就不提了

5、編碼問題?。。。ㄟ@邊上面說這么多,就是為了最后一個“編碼問題”)

我將著重講解編碼問題:

在Form元素的語法中,EncType表明提交數(shù)據(jù)的格式 
用 Enctype 屬性指定將數(shù)據(jù)回發(fā)到服務器時瀏覽器使用的編碼類型。 
一般是下面幾種類型: 
application/x-www-form-urlencoded: 窗體數(shù)據(jù)被編碼為名稱/值對。這是標準的編碼格式。 
multipart/form-data: 窗體數(shù)據(jù)被編碼為一條消息,頁上的每個控件對應消息中的一個部分。 
text/plain: 窗體數(shù)據(jù)以純文本形式進行編碼,其中不含任何控件或格式字符。

假設此時使用get提交form方式:

瀏覽器則會用x-www-form-urlencoded的數(shù)據(jù)格式,雖然在F12瀏覽器調(diào)試或者cs代碼中的Request.ContentType都看不出來。注意如下是我的get提交的url:

GET /Default2.aspx?__VIEWSTATE=MGASeC9kBMq4iDCI2YLRzkZYqkKYhDhWH2jlP5mpv7idP8gAoNcy0T0y6g6wRvccP%2BFz%2FVx4HdMGwLLW%2BYPbJsMEOTMi5PjS7Ea66DmHQJc%3D&__VIEWSTATEGENERATOR=9BD98A7D&__EVENTVALIDATION=BFMAr0Q6mSwngMhaCLeScGaXywIIRlFClDYAnVhHprxOeifBIGWKNbsunWO9yVOAV6jWHW%2FJ4g2laHQpTvJe%2Fc7X8vralK3hyO5Y0nuiJkT%2FdfxEj9NnCb8S5BfNvZKXVJA%2FOy8yH4Bf9K5DN%2FRI9aDR3EFR86Zm6fN4iEkvJfc%3D&Button2=%E9%98%BF%E9%81%93%E5%A4%AB

我只看最后部分“Button2=%E9%98%BF%E9%81%93%E5%A4%AB”,這是我的服務器按鈕“阿道夫”,這一串“%E9%98%BF%E9%81%93%E5%A4%AB”是“阿道夫”三個漢字編碼后的,究竟這個編碼方式到底是什么?又是如何經(jīng)常引起亂碼問題的呢?

首先:get只能向服務器發(fā)送ASCII字符,這是W3C組織規(guī)定的,所以任何參數(shù)最后都要以ASCII碼的形式傳遞,例如“Button2=%E9%98%BF%E9%81%93%E5%A4%AB”都是ASCII碼中的英文字符和符號等字符,沒有任何中文字符,其次編碼方式是根據(jù)當前網(wǎng)頁采用選擇的編碼來編碼,例如asp.net網(wǎng)頁使用的是utf-8碼,那么“阿道夫”用utf-8的編碼后的十六進制字符串就是“E9-98-BF-E9-81-93-E5-A4-AB”,和上面提到的“%E9%98%BF%E9%81%93%E5%A4%AB”是不是非常的類似,只是多了百分號

如何查看中文字符的十六進制字符串?方法:BitConverter.ToString(System.Text.Encoding.UTF8.GetBytes("阿道夫"));

如果用本文一開始介紹的方法,在Page_Load中加上

Encoding gb2312 = Encoding.GetEncoding("gb2312");
Response.ContentEncoding = gb2312;

強制把當前頁面編碼改為gb2312,然后點擊按鈕,那么我們猜測在F12瀏覽器調(diào)試時,get提交的url的最后部分一定不再是“%E9%98%BF%E9%81%93%E5%A4%AB”,

調(diào)試后發(fā)現(xiàn)是:“%B0%A2%B5%C0%B7%F2”

那么用BitConverter.ToString(System.Text.Encoding.Default.GetBytes("阿道夫"))生成的值呢?答案是:B0-A2-B5-C0-B7-F2

這一切證明了url參數(shù)編碼方式是根據(jù)當前網(wǎng)頁采用選擇的編碼來編碼

然后我將在服務端接受參數(shù),這邊有兩種情況

情況1、ok,我再次以get方式提交form,并是以utf-8編碼(默認),此時,我在服務端通過Request.QueryString["Button2"],我將得到“阿道夫”,一切正常

情況2、ok,我繼續(xù)以get方式提交form,并是以gb2312編碼(如何設置上文講過),此時,我在服務端通過Request.QueryString["Button2"],我將得到“??????”,正如我愿

 

為何一開始正常,后面會出現(xiàn)亂碼,我這邊做幾個假設:

假設1、對于情況1 的Request.QueryString["Button2"]沒有出現(xiàn)亂碼,我是否可以猜測微軟Request.QueryString內(nèi)部自帶有解碼的操作?并且在這種情況下該操作是utf-8的解碼方式

假設2、對于情況2 的Request.QueryString["Button2"]出現(xiàn)亂碼,我是否可以猜測是因為微軟Request.QueryString內(nèi)部自帶有解碼的操作,并按照utf-8解碼方式 解碼我用gb2312編碼的字符,這種不對稱的解碼肯定是錯誤的

如何驗證我的結(jié)論?路過秋天  的這篇文章寫的很詳細,我總結(jié)下大概就是:

反編譯Request.QueryString屬性,你會發(fā)現(xiàn)有這么如下代碼:最后深入到代碼關鍵點:this._queryString.FillFromEncodedBytes(queryStringBytes, this.QueryStringEncoding);從FillFromEncodedBytes方法中可以看出調(diào)用HttpUtility.UrlDecode(bytes, num2, num3 - num2, encoding)的解碼方法,我們現(xiàn)在知道Request.QueryString內(nèi)部實現(xiàn)是調(diào)用了HttpUtility.UrlDecode解碼的方法,那么關鍵點就在HttpUtility.UrlDecode方法的第三個參數(shù)encoding到底是哪種解碼方式

 QueryString

 

 EnsureQueryString

 

 1 private void FillInQueryStringCollection() 2 { 3     byte[] queryStringBytes = this.QueryStringBytes; 4     if (queryStringBytes != null) 5     { 6         if (queryStringBytes.Length != 0) 7         { 8             this._queryString.FillFromEncodedBytes(queryStringBytes, this.QueryStringEncoding); 9             return;10         }11     }12     else13     {14         if (!string.IsNullOrEmpty(this.QueryStringText))15         {16             this._queryString.FillFromString(this.QueryStringText, true, this.QueryStringEncoding);17         }18     }19 }

 下面是FillFromEncodedBytes方法實現(xiàn):

 1 internal void FillFromEncodedBytes(byte[] bytes, Encoding encoding) 2 { 3     int num = (bytes != null) ? bytes.Length : 0; 4     for (int i = 0; i < num; i++) 5     { 6         this.ThrowIfMaxHttpCollectionKeysExceeded(); 7         int num2 = i; 8         int num3 = -1; 9         while (i < num)10         {11             byte b = bytes[i];12             if (b == 61)13             {14                 if (num3 < 0)15                 {16                     num3 = i;17                 }18             }19             else20             {21                 if (b == 38)22                 {23                     break;24                 }25             }26             i++;27         }28         string name;29         string value;30         if (num3 >= 0)31         {32             name = HttpUtility.UrlDecode(bytes, num2, num3 - num2, encoding);33             value = HttpUtility.UrlDecode(bytes, num3 + 1, i - num3 - 1, encoding);34         }35         else36         {37             name = null;38             value = HttpUtility.UrlDecode(bytes, num2, i - num2, encoding);39         }40         base.Add(name, value);41         if (i == num - 1 && bytes[i] == 38)42         {43             base.Add(null, string.Empty);44         }45     }46 }

this.QueryStringEncoding是HttpUtility.UrlDecode解碼的關鍵,我們發(fā)現(xiàn)系統(tǒng)默認會先取globalization配置節(jié)點的編碼方式,如果取不到,則默認為UTF-8編碼方式

 1 internal Encoding QueryStringEncoding 2 { 3     get 4     { 5         Encoding contentEncoding = this.ContentEncoding; 6         if (!contentEncoding.Equals(Encoding.Unicode)) 7         { 8             return contentEncoding; 9         }10         return Encoding.UTF8;11     }12 }
 1 public Encoding ContentEncoding 2 { 3     get 4     { 5         if (this._flags[32] && this._encoding != null) 6         { 7             return this._encoding; 8         } 9         this._encoding = this.GetEncodingFromHeaders();10         if (this._encoding is UTF7Encoding && !AppSettings.AllowUtf7RequestContentEncoding)11         {12             this._encoding = null;13         }14         if (this._encoding == null)15         {16             GlobalizationSection globalization = RuntimeConfig.GetLKGConfig(this._context).Globalization;17             this._encoding = globalization.RequestEncoding;18         }19         this._flags.Set(32);20         return this._encoding;21     }22     set23     {24         this._encoding = value;25         this._flags.Set(32);26     }27 }

 

得出結(jié)論:

在method為get的提交方式中,如果在web.config中不配置任何globalization相關節(jié)點,那么Request.QueryString屬性獲取uri參數(shù)時會自動用utf-8解碼,如果此時你的頁面是采用gb2312編碼,那么cs端獲取必定會是亂碼

解決方法(form提交method為get):

方法1、配置globalization節(jié)點,例如<globalization requestEncoding="gb2312" responseEncoding="gb2312" fileEncoding="gb2312" culture="zh-CN"/>
那么get提交的uri附加的參數(shù)會采用gb2312編碼,cs服務端Request.QueryString就會根據(jù)globalization配置的requestEncoding值gb2312進行內(nèi)部的HttpUtility.UrlDecode
方法2、不配置globalization任何節(jié)點,在html端對將要拼接到uri后面的中文參數(shù)進行encodeURIComponent或者encodeURI編碼處理,因為encodeURIComponent或者encodeURI就是utf-8的編碼方法(永遠不會變),然后再cs服務端Request.QueryString接收后,再用 HttpUtility.UrlDecode("", Encoding.Default)進行解碼(或者用Server.UrlDecode()解碼,效果一樣,Server.UrlDecode為使用當前操作系統(tǒng)的編碼解碼方式),如下:

假設form method=get,當前環(huán)境ContentEncoding為gb2312

未做任何處理操作時要請求服務器的uri的一部分:
Default2.aspx?Button2=%B0%A2%B5%C0%B7%F2

在腳本端用encodeURIComponent對”阿道夫“進行編碼后的將要請求服務器的uri的一部分:
Default2.aspx?Button2=%E9%98%BF%E9%81%93%E5%A4%AB

cs服務端:
              
string param1 = Request.QueryString["Button2"];//param1的值為%E9%98%BF%E9%81%93%E5%A4%AB,雖然Request.QueryString內(nèi)部有utf-8解碼操作,但是對于全是英文和符號等屬于assic碼的字符不會做任何解碼操作(utf-8包含assic)
              string param2 = HttpUtility.UrlDecode(param1, Encoding.UTF8);//再針對性的用Encoding.UTF8對在腳本端用encodeURIComponent(編碼方式為:utf-8)編碼的param1進行對應解碼,一切都安靜了。值為“阿道夫”

如果理解了編碼解碼的機制,那么如果僅僅是在cs服務端編碼傳遞帶有中文參數(shù)的url到另一個頁面,也需要注意對應的編碼解碼問題,比如A頁面的按鈕點擊后跳轉(zhuǎn)到B頁面,我舉四種情況,大家判斷哪種情況下在B頁面接收時會有亂碼出現(xiàn)

備注:  HttpUtility.UrlDecode(param1)在沒有第二個參數(shù)的情況下默認和HttpUtility.UrlDecode(param1, Encoding.UTF8)等效,除非你強制指定第二個參數(shù)比如:HttpUtility.UrlDecode(param1, Encoding.Default)
第一種:沒有配置任何globalization節(jié)點(正確
A頁面的按鈕代碼:

1 protected void Button1_Click(object sender, EventArgs e)2         {3             string param = "阿道夫";4             Response.Redirect("~/Default.aspx?param=" + param);5         }

B頁面的接收代碼:

1 string param1 = Request.QueryString["param"];

第二種:配置了globalization節(jié)點<globalization requestEncoding="gb2312" responseEncoding="gb2312" fileEncoding="gb2312" culture="zh-CN"/>(正確

A頁面的按鈕代碼:

1 protected void Button1_Click(object sender, EventArgs e)2         {3             string param = "阿道夫";4             Response.Redirect("~/Default.aspx?param=" + param);5         }

B頁面的接收代碼:

1 string param1 = Request.QueryString["param"];

第三種:沒有配置任何globalization節(jié)點(正確
A頁面的按鈕代碼:

1 protected void Button1_Click(object sender, EventArgs e)2         {3             string param = "阿道夫";4             Response.Redirect("~/Default.aspx?param=" + HttpUtility.UrlEncode(param));5         }

B頁面的接收代碼:

1 string param1 = Request.QueryString["param"];

 

第四種:配置了globalization節(jié)點<globalization requestEncoding="gb2312" responseEncoding="gb2312" fileEncoding="gb2312" culture="zh-CN"/>(亂碼

A頁面的按鈕代碼:

1 protected void Button1_Click(object sender, EventArgs e)2         {3             string param = "阿道夫";4             Response.Redirect("~/Default.aspx?param=" + HttpUtility.UrlEncode(param));
5 }

B頁面的接收代碼:

1 string param1 = Request.QueryString["param"];

參考上面的解釋,應該能理解為何第四種是亂碼,這里不再做太多解釋

另外在jquery被大行其道的現(xiàn)在,$.ajax{}、$.post()、$.get()等函數(shù)使用時更是應該注意編碼解碼的問題,大致注意如下:
如果你的頁面使用的是
gb2312編碼,不要用jquery的$.get()或$.post()做ajax提交,因為這兩個方法默認為utf-8,而且是無法指定修改contentType的,默認為:contentType:"pplication/x-www-form-urlencoded; charset=UTF-8",為什么無法修改?因為$.post 和$.get()本身就只是 $.ajax 的 post 或者get方式的一種簡寫形式,既然是簡寫為了方便使用當然會固定死很多屬性
可以用$.ajax()并在其中加入:contentType:"application/x-www-form-urlencoded; charset=GB2312";
寫成以下形式,可以在大多數(shù)情況避免亂碼:
$.ajax({ 
  type: "POST",
 contentType:"pplication/x-www-form-urlencoded; charset=GB2312", 
  url: "XXX“, 
  data: {},
  success: function(msg){ alert( msg ); }
});

 

*****以上使用get提交form方式的介紹真的可以告一段落,我想我寫的很臃腫,表達上會有很多冗余的地方******

下面介紹post提交form的方式

在asp.net頁面的form不做任何處理的時候,默認編譯生成html時會自動加上method="post" ,F(xiàn)12調(diào)試,發(fā)現(xiàn)Content-Type的值是:application/x-www-form-urlencoded,這也是我上面提到過的Form元素的EncType屬性:表明提交數(shù)據(jù)的格式 
一般Enctype 屬性指定將數(shù)據(jù)回發(fā)到服務器時瀏覽器使用的編碼類型。 
application/x-www-form-urlencoded: 窗體數(shù)據(jù)被編碼為名稱/值對。這是標準的編碼格式。 
multipart/form-data: 窗體數(shù)據(jù)被編碼為一條消息,頁上的每個控件對應消息中的一個部分。 
text/plain: 窗體數(shù)據(jù)以純文本形式進行編碼,其中不含任何控件或格式字符

那也就是說,假如我使用post方式提交,Enctype為application/x-www-form-urlencoded,那么那些需要提交服務器的值依然會被編碼,只不過這次不是拼接在uri后面,而是存放在body里面,那么這樣依然在不小心的情況下會帶來上面描述的亂碼問題,當然如果你是post提交,(或者你在asp.net頁面不操作form任何屬性,保持默認)那么在cs服務端請不要再用Request.QueryString獲取值了,這是獲取不到的,應該用Request.Form[""],請盡量少用Request[""]或者Request.Params[""],這兩個將加大你的遍歷搜索你需要參數(shù)值的范圍,Request可以訪問的有QueryString、Form、Cookies 或 ServerVariables這4個集合的數(shù)據(jù),get請求用Request.QueryString,post用Request.Form,而Request[""]是依次訪問這4個集合,找到就返回結(jié)果,而Request.Params[""]是在訪問時,先將4個集合的數(shù)據(jù)合并到一個新集合(集合不存在時創(chuàng)建)再去查找,效率可想而知

 

我現(xiàn)在手動將form改為:<form id="form1" enctype="multipart/form-data" method="post" runat="server"> 注意multipart/form-data只能用于post

瀏覽器會把整個表單以控件為單位分割,并為每個部分加上Content-Disposition(form-data或者file),Content-Type(默認為text/plain),name(控件name)等信息,并加上分割符

 

“boundary”是分隔符的意思,一般multipart/form-data用于文件上傳,普通的傳參或者提交form元素列表值還是使用默認的application/x-www-form-urlencoded吧

 

推薦的網(wǎng)址:

http://www.cnblogs.com/cyq1162/archive/2010/11/29/1891124.html
http://blog.sina.com.cn/s/blog_89cd68470101e21m.html 
http://www.cnblogs.com/fish-li/archive/2011/12/06/2278463.html

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
struts,ajax亂碼解決方案
java.net.URLEncode編碼與URLDecode解碼問題-明明的日志...
中文化和國際化問題權(quán)威解析之五:URL編碼/Misc
關于url編碼問題的處理的幾個方法的總結(jié)
Java中文&編碼問題小結(jié) - 笨笨的思想片斷 - BlogJava
Python網(wǎng)絡爬蟲學習基礎筆記
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服