c#和javascript特殊字元的前後端轉換

來源:互聯網
上載者:User

標籤:

前段時間做一個項目,需要處理輸入的特殊字元的問題。所謂特殊字元,主要指除字母、數字、漢字等之外的一些符號,項目的要求是不管使用者輸入什麼字元,都可以在介面上原樣顯示出來。我們知道javascript有符號的編碼和解碼方法:escape和unescape,而c#其實也有對應的方法Microsoft.JScript.GlobalObject.escape和Microsoft.JScript.GlobalObject.unescape。那具體怎樣使用呢?

 

1.ajax方式從後台取資料到前端轉換成json格式,c#代碼要對特殊字元串進行編碼,否則前端可能無法轉換成json格式的資料。

比如字串中包含雙引號、逗號、冒號等跟json格式衝突的符號時,如果不進行轉換,json轉換時會報錯。此時c#代碼需要調用Microsoft.JScript.GlobalObject.escape(string str)方法將該字串進行編碼後組織成json字串response到前端,前端ajax接收到該字串時需要調用javascript的unescape(str)方法進行解碼後再使用。當然首先需要添加Microsoft.JScript的引用。

例:

定義字串

 string str = "...,:";

  StringBuilder builder = new StringBuilder();

不轉換輸出

builder.Append("{");
builder.AppendFormat("\"content\":\"{0}\"", str);
builder.Append("}");

context.Response.Write(builder.ToString());

ajax端代碼:

$.ajax({

url: "Hander.ashx",

dataType: "json",
type: "get",
data: { method: "getName" },
beforeSend: function () {
},
success: function (data, textStatus){

if(data){

//前端採用unesacpe轉換需要的資料。

var name=unescape(data.name);

//......

}

},

error: function (XMLHttpRequest, textStatus, errorThrown){

}

c#端代碼不轉換時ajax的error方法會執行,可以取得錯誤資訊。

 

而c#代碼轉換其實很簡單,只需要將上面的builder.AppendFormat("\"content\":\"{0}\"", str)換成builder.AppendFormat("\"content\":\"{0}\"", Microsoft.JScript.GlobalObject.escape(str))即可。

 

2.ajax方式從前端傳資料給後端。需要將特殊字元進行escape編碼,否則通過get方式傳遞資料時如果有?、&、=等字元就會出現異常,因為這幾個字元是get方式的url的參數串連符。

var name="?%&=" ;

$.ajax({

url: "Hander.ashx",

dataType: "json",
type: "get",
data: { method: "setName",name:name},
beforeSend: function () {
},
success: function (data, textStatus){

}

此時需要對name進行escape編碼再傳遞給後台,name=escape(name)。

 

c#端接收的時候就很簡單了,調用Microsoft.JScript.GlobalObject.unescape(context.Request[name])即可。

 

說了這麼多,其實就是一句話的事,javascript的unescape和escape對應c#的Microsoft.JScript.GlobalObject.unescape和Microsoft.JScript.GlobalObject.escape方法。自己根據需要調用就是了。

 

c#和javascript特殊字元的前後端轉換

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.