一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - asp.net URL中包含中文參數造成亂碼的解決方法

asp.net URL中包含中文參數造成亂碼的解決方法

2019-07-16 21:42服務器之家 ASP.NET教程

中文亂碼一直以來是WEB開發中比較常見的問題之一,對于初學者來說,各種各樣的編碼方式可能會有點不適應,本篇文章并不講述這些編碼,而是把自己遇到的一個小問題以及該問題的解決之法說明一下,希望對大家有用。

問題: 
  前段時間,在系統中做了一個類似于友情鏈接的功能塊,一直運行良好,直到有一天加了類似于以下的鏈接地址:http://www.****.com/user.aspx?id=水天,就出現大問題了: 
  1、從IE地址欄中直接輸入這個地址,訪問沒錯; 
 ?。?、做一個靜態頁,其中包括這個超鏈接,點擊訪問也沒錯; 
 ?。?、就是把這個鏈接添加到這個功能塊中,點擊訪問那邊接收到的是亂碼。 
  一開始,被這個問題也搞得頭大,在google了一把后,總算是把問題給搞清楚了,其實只要這個鏈接地址不經過任何編碼傳遞是不會有問題的。但就是加到了這個功能塊后,再點擊,雖然這個時候在IE地址欄里顯示的還是"http://www.****.com/user.aspx?id=水天",但真正傳遞過去的參數"水天"其實已經經過類似于Server.UrlEncode的操作了,當然默認是utf-8編碼,正是由于這個原因,如果對方系統不進行相應的解碼,直接操作該參數,就產生了以上的錯誤。 
  解決方法: 
  網上有很多解決之道,最常見的莫過于以下幾點: 
 ?。?、在web.config里配制<globalization requestEncoding="gb2312" responseEncoding="gb2312" />,這個方法確實可行,但我想很多人不想用這種方法來解決,把整個項目的請求和回應都定為gb2312,我覺得不是一個好辦法,有點本末倒置了,畢竟這會導致很多其它問題的出現。 
  2、把要包含該鏈接的aspx文檔,修改其charset屬性為gb2312。這個方法到也可以接受,不過對于該文中的問題還不是最好的方法,因為該功能塊是可以動態添加到任何頁面的,難道要去修改所有的頁面?想想還是不太合適。 
  3、直接用Server.UrlEncode和Server.Decode進行加碼和解碼操作,這種方法對于發送方和接收方都在一個項目中是可行的,現在的問題是,我們要隨意去訪問別人的系統,所以只能棄用此方法了。 
 ?。?、采用HttpUtility.UrlEncode(query, System.Text.Encoding.GetEncoding("GB2312"));對鏈接中的參數值進行gb2312的編碼,這種方法,對方不用進行任何解碼操作,直接接收參數則不會出現亂碼。 
  一般提到最多的也就上面4種方法,其它的也跟這些大同小異。仔細分析后,覺得還是第4種方法最適合解決當前問題,把中文參數進行如4中的操作。但又出現另外一個問題,由于這是一個用戶可以自由輸入鏈接地址的功能,所以首先要做的就是得先分析這些鏈接URL,解析出參數,再對這些參數進行4中操作,然后再合拼成原來的URL地址。 
  幸虧,URL參數解析C#已經有類庫的支持,不用再去寫那些復雜的正則表達式來匹配了。這里我也不詳細說了,直接貼出原碼: 

復制代碼代碼如下:


public static string InitChineseUrl(string chineseUrl) 

Uri url = new Uri(chineseUrl); 
System.Collections.Specialized.NameValueCollection nv = System.Web.HttpUtility.ParseQueryString(url.Query, System.Text.Encoding.GetEncoding("utf-8")); 
string query = ""; 
for (int i = 0; i < nv.Count; i++) 

if (query.Trim() == string.Empty) 

query = "?" + nv.Keys[i] + "=" + HttpUtility.UrlEncode(nv[i], System.Text.Encoding.GetEncoding("GB2312")); 

else 

query += "&" + nv.Keys[i] + "=" + HttpUtility.UrlEncode(nv[i], System.Text.Encoding.GetEncoding("GB2312")); 


string u = chineseUrl.Split('?')[0] + query; 
return u; 


  這里我是把所有的參數都進行gb2312編碼操作了,反正參數如果是英文或者是數字,經過這些操作后還是不變的。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 免费视频专区一国产盗摄 | 亚洲小视频网站 | 91gmail国产 | 成人尤物 | 800精品国产导航 | 成人高辣h视频一区二区在线观看 | 好男人免费高清在线观看2019 | 高清免费毛片 | 99er视频| 扒开双腿疯狂进出爽爽动态图 | 精品老司机在线视频香蕉 | 校花被拖到野外伦小说 | 国产另类视频一区二区三区 | 亚洲国产天堂 | 久久re亚洲在线视频 | 91夜夜人人揉人人捏人人添 | 精品国产福利在线观看一区 | 国产成人久久精品推最新 | 国产a免费| 国产永久免费视频m3u8 | 午夜秀场在线观看 | www.久久av.com| 国产精品视频一区二区三区 | 免费一级特黄特色大片在线观看 | 2020年新四虎免费 | 久久这里都是精品 | 91高清国产经典在线观看 | 国产高清路线一路线二2022 | 欧美三级一区二区 | 国产成年人网站 | 1313午夜精品理伦片 | 51香蕉视频| 国产成人精品日本亚洲网站 | 国内精品久久久久影院嫩草 | 国产精品成人va在线观看 | 久久一er精这里有精品 | 人体做爰aaaa免费 | 免费欧美一级片 | 欧美3d怪物交videos网站 | 国产欧美精品一区二区三区–老狼 | 狠狠色伊人亚洲综合网站色 |