怎樣解決asp.net URL傳值出現(xiàn)錯誤的問題(2)_.Net教程
教程Tag:暫無Tag,歡迎添加,賺取U幣!
推薦:解讀asp.net常用正則表達式一、字段 表達式 格式示例 說明 數(shù)字^\D?(\d{3})\D?\D?(\d{3})\D?(\d{4})$(425)-555-0123425-555-01234255550123驗證美國電話號碼。 名稱[a-zA-Z’`-\s]{1,40}JohnDoeO’Dell驗證名稱。最多允許使用40個大寫字母和小寫字母,以及一些在名稱中常用的特殊字符
但是這樣的傳遞中文可能還會遇到其他中文字出問題,最好是采用下面的方法將中文參數(shù)編碼。
3. 我采用URLEncode()編碼,采用URLEncode()不在Web.config中設置好像也可以,在我的測試中沒有問題,但是為了安全,我們還是添加上上面的設置。
3.1.
頁面上都是一致的,第一頁面的后臺代碼:
| public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string url; string name; url = "Default2.aspx?Name="; name = "DK51+700中繼站"; name = name.Replace("+", "@"); HyperLink1.NavigateUrl = url + Server.UrlEncode(name); } } |
3.2.
第二個頁面中,后臺代碼:
| public partial class Default2 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string name = Request.QueryString["Name"]; name = name.Replace("@", "+"); name = name.Replace("%", "站"); Label1.Text = name; } } |
3.3.結(jié)果是:“DK51+700中繼站”。正確!
后來我在網(wǎng)上找到這個這樣的設置,在Web.config中設置:
| <system.web> <globalization requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" fileEncoding="gb2312" /> </system.web> |
但是這樣的傳遞中文可能還會遇到其他中文字出問題,最好是采用下面的方法將中文參數(shù)編碼。
我采用
4.1.頁面上都是一致的,第一頁面的后臺代碼:
| public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string url; string name; url = "Default2.aspx?Name="; name = "DK51+700中繼站"; name = name.Replace("+", "@"); HyperLink1.NavigateUrl = url + Server.UrlEncode(name); } } |
4.2 第二頁面的后臺代碼:
| public partial class Default2 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string name = Request.QueryString["Name"]; name = Server.UrlDecode(name); name = name.Replace("@", "+"); Label1.Text = name; } } |
4.3 結(jié)果是:“DK51+700中繼站”。正確!
注意:一定要前后對應,比如在這里,第一頁面中是先編碼的,后替代,第二頁面中就要先替代,再解碼,不然就會出錯,如:“DK51 700中繼站”
我在開頭提到,遇到了比較多的問題:
1. 網(wǎng)上的資料有的說是用“%20”來替代“+”,但是我嘗試了下,結(jié)果卻是錯誤的: “DK51 700中繼站”,這是什么原因呢?是網(wǎng)上說錯了嗎?但是在下面的情況中,又很讓我苦笑不得,不知道具體是什么原因。
2. 接上面,還是用“%20”來替代“+”;我在一次錯誤的輸入,在第一頁面后臺輸入了name = Server.UrlEncode(name);第二頁面中解碼是 name = Server.HtmlDecode(name);居然是結(jié)果對的,“DK51+700中繼站”。我換了其他的替代字符,結(jié)果也是正確的。
但是我換了其他編碼和解碼組合:Server.HtmlEncode(name)和Server.UrlDecode(name),或者Server.HtmlEncode(name)和Server.HtmlDecode(name)組合,結(jié)果就不對。連中文都不對:“DK51 700中繼口”。
3. 我采用Server.HtmlEncode(name)和Server.HtmlDecode(name)組合,要得到正確的結(jié)果,必須用像“@“這樣的特殊字符來替代“+”,當然還有在Web.config中添加設置,設置內(nèi)容如上。
4. 我在查資料的時候還有提到一種方法;不需要在Web.config中添加設置,在aspx文件中添加:
| <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> |
我嘗試了,沒成功。
5. 我還有個疑問是,在這里,我是用“@”的特殊字符來代替“+”,因為在我的字符串中是不可能出現(xiàn)“@”,才這樣做的。但是如果我的字符串中可能出現(xiàn)這些特殊字符串,我又該如何替代呢?
6. 我在經(jīng)歷了這些測試后,覺得最安全的方法,在URL中傳遞參數(shù)時,最好還是使用URLDecode()方法。在Web.config中配置上
| <system.web> <globalization requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" fileEncoding="gb2312" /> </system.web> |
配置這個是需要注意,你的程序中的字符集是不是也用這個“
今天理解到了測試時需要很有耐心的,在這個問題中,正確的方法就是可能就是一兩種,但是為了測試錯誤的情況,我做了七八種情況,比如URLEncode,URLDecode和HtmlEncode,HtmlDecode的組合問題,傳遞時和接收時,編碼,替代,解碼,的先后順序。這些花了很多時間,篇幅太多,這里就寫這些。
分享:.net編程中常見錯誤詳解1:command調(diào)用存儲過程的時候,如果輸出是dataset,selectcommand的command對象的connection先要指出,否則catch一輩子也是空的.. 2:存儲過程的varchar字段如果是x.x的這種格式,容易出現(xiàn)細微的傻錯誤,注意不要漏了[]. 3:如果ascx文件的默認服務器控件的事件不重
相關.Net教程:
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實例(可帶附件)
- js實現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實現(xiàn)
- Asp.Net 無刷新文件上傳并顯示進度條的實現(xiàn)方法及思路
- Asp.net獲取客戶端IP常見代碼存在的偽造IP問題探討
- VS2010 水晶報表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(連接字符串的配置及獲取)
- asp.net頁面?zhèn)髦禍y試實例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲過程實現(xiàn)分頁示例代碼
- 相關鏈接:
- 教程說明:
.Net教程-怎樣解決asp.net URL傳值出現(xiàn)錯誤的問題(2)
。