天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

參數編碼 完全解決方案

參數編碼規范

一.摘要

我們經常要在頁面傳遞中文數據,但是往往被文字編碼所困惑.有時不了解到底是瀏覽器編碼問題還是服務器編碼問題.本文分析了互聯網傳遞數據的編碼原理, 并且提出了完善易用的解決方案.

二.原則

避免在get或者post參數時直接傳遞中文字符.中文參數需要經過編碼后再傳遞.服務器端要使用相同的編碼格式進行解碼

三.錯誤觀點

1.很多程序員認為url中可以傳遞中文. 
url中并不能攜帶中文參數.如果我們在瀏覽器中輸入"http://localhost/?a=中文",感覺上我們在url中帶了中文,實際上當按下回車鍵后,瀏覽器自動將其中的"中文"漢字進行編碼后傳遞給服務器.

2.當獲取中文參數產生了亂碼時, 往往首先檢查服務器端程序的編碼格式.
很多人認為url可以傳遞中文,不知道瀏覽器有自動編碼的行為, 所以單純的認為問題出在服務器端.其實即使在服務器端找到了正確的編碼格式,我們也不應該輕易地改變服務器的默認編碼格式. 

3.傳遞參數前編碼,使用Request對象獲取參數時解碼
很多的程序員認為認為,傳遞參數時我們使用UrlEncode等方式編碼, 在接收時應該使用UrlDecode解碼.這是常見的錯誤請大家一定要注意,使用默認的Request.QueryString和Request.Form時已經自動執行了一次解碼,使用的解碼格式是服務器端設置的默認編碼格式.

四.原因

傳遞中文字符時,自動的編碼解碼格式和瀏覽器與服務器的設置有關.

測試Firefox3和IE6的Get方式發送中文參數, Firefox默認使用UTF-8格式編碼中文參數, 而IE6即使在高級設置中設置了"總是以 UTF-8 發送URL", 仍然自動使用GB2312編碼中文參數.

對于服務器端我們可以自由的控制解碼的格式.但是往往是通過更改服務器配置進行全局的統一設置.比如對于ASP.NET程序.可以在Web.Config中設置服務器段的編碼和解碼格式:

<globalization culture="zh-CN" uiCulture="zh-CN" requestEncoding="UTF-8" responseEncoding="gb2312" />

但是我們沒法控制瀏覽器端行為.用戶可能使用不同的瀏覽器.

五.解決方案

1.統一默認的編碼格式

(1)設置服務器端的編碼格式為UTF-8

(2)傳遞參數全部進行編碼,.服務器端(C#)使用Server.UrlEncode方法,客戶端(Javascript)使用encodeURIComponent方法.

說明:

客戶端的Javascript函數encodeURIComponent只能使用UTF-8編碼格式. 所以需要設置服務器端request和response都為UTF-8.

缺陷是如果某些合作伙伴必須傳遞其他的編碼格式的參數, 則服務器端或獲取到亂碼.此方案實現簡單,適合大部分場景.

2.通過編碼參數指定編碼格式

為了解決可能存在的無法統一編碼格式的問題, 我們使用一個參數"encoding"來顯示的指定編碼格式.encoding參數需要在所有的請求中傳遞,無論是get還是post.

(1)對于Javascript客戶端編碼而言, 仍然使用encodeURIComponent方法編碼, 此時指定encoding參數的值為"UTF-8".

(2)對于傳入給服務器端的其他編碼格式, 比如GB2312, 我們不能使用默認的Request.Form或者QueryString方法進行編碼.因為服務器端的編碼格式可能設置為了UTF-8.此時使用Request.Form或者QueryString會自動使用服務器端指定的編碼格式進行解碼. 所以需要使用下面的方法自己處理請求,獲取參數:

        /// <summary>
/// 根據指定的編碼格式返回請求的參數集合 ziqiu.zhang 2009.1.19
/// </summary>
/// <param name="request">當前請求的request對象</param>
/// <param name="encode">編碼格式字符串</param>
/// <returns>鍵為參數名,值為參數值的NameValue集合</returns>
public static NameValueCollection GetRequestParameters(HttpRequest request, string encode)
{
NameValueCollection result
= null;
Encoding destEncode
= null;

//獲取指定編碼格式的Encoding對象
if (!String.IsNullOrEmpty(encode))
{
try
{
//獲取指定的編碼格式
destEncode = Encoding.GetEncoding(encode);
}
catch
{
//如果獲取指定編碼格式失敗,則設置為null
destEncode = null;
}
}

//根據不同的HttpMethod方式,獲取請求的參數.如果沒有Encoding對象則使用服務器端默認的編碼.
if (request.HttpMethod == "POST")
{
if (null != destEncode)
{
Stream resStream
= request.InputStream;
byte[] filecontent = new byte[resStream.Length];
resStream.Read(filecontent,
0, filecontent.Length);
string postquery = destEncode.GetString(filecontent);
result
= HttpUtility.ParseQueryString(postquery, destEncode);
}
else
{
result
= request.Form;
}
}
else
{
if (null != destEncode)
{
result
= System.Web.HttpUtility.ParseQueryString(request.Url.Query, destEncode);
}
else
{
result
= request.QueryString;
}
}

//返回結果
return result;
}

NET技術參數編碼 完全解決方案,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 久久日韩精品无码一区 | 国产AV99激情久久无码天堂 | 美国CERANETWORK超清 | 国产精品久久久精品日日 | 午夜特级毛片 | 国产成年人在线观看 | 老头狠狠挺进小莹体内视频 | 丰满的女朋友韩国版在线观看 | 欧亚一卡二卡日本一卡二卡 | 色老99九久精品偷偷鲁 | 中文字幕在线久热精品 | 国产传媒18精品A片在线观看 | 色老头色老太aaabbb | 亚洲 欧美 国产 在线 日韩 | 韩国精品韩国专区久久 | 国产AV精品一区二区三区漫画 | 古代荡女丫鬟高H辣文纯肉 姑娘视频日本在线播放 | 被窝国产理论一二三影院 | 男女疯狂一边摸一边做羞羞视频 | www免费看.男人的天堂 | 日日摸夜夜添无码AVA片 | 国产成人女人视频在线观看 | 男人J进入女人P免费狂躁 | 成人伊人青草久久综合网 | 男女又黄又刺激B片免费网站 | 99久久免热在线观看 | 久99re视频9在线观看 | 妻子撸av中文字幕 | 国产AV无码熟妇人妻麻豆 | 久久综合色一综合色88 | 亚洲国产成人私人影院 | 久久久久久久久久毛片精品美女 | 久久一本岛在免费线观看2020 | 丹麦1o一19sex性hdhd | 秋霞电影伦网理最新在线看片 | 最近中文字幕完整版高清 | 免费久久狼人香蕉网 | 日本无码专区亚洲麻豆 | 成人影院久久久久久影院 | 99热久久这里只有精品 | 大中国免费视频大全在线观看 |