您的位置:首页 > Web前端 > JavaScript

c#和javascript特殊字符的前后端转换

2015-04-01 12:35 141 查看
前段时间做一个项目,需要处理输入的特殊字符的问题。所谓特殊字符,主要指除字母、数字、汉字等之外的一些符号,项目的要求是不管用户输入什么字符,都可以在界面上原样显示出来。我们知道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方法。自己根据需要调用就是了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: