标签:
前段时间做一个项目,需要处理输入的特殊字符的问题。所谓特殊字符,主要指除字母、数字、汉字等之外的一些符号,项目的要求是不管用户输入什么字符,都可以在界面上原样显示出来。我们知道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方法。自己根据需要调用就是了。
标签:
原文地址:http://www.cnblogs.com/bulusli/p/4383526.html