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方法。自己根据需要调用就是了。
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方法。自己根据需要调用就是了。
相关文章推荐
- javascript 特殊字符的转换
- 字符串内特殊字符在html_javascript_xml等内使用时的转换 ,"缺少十六进制数字"错误的处理
- 前台Javascript转换特殊字符
- 过滤javascript中警告信息的特殊字符(C#)
- javascript的转换特殊字符为HTML实体字符
- C# 中获取的网页的字符转换问题
- C#操作word之写入特殊字符、选择框
- C#之字符判断和大小写的转换
- C#中字符转换问题详解
- C# 字符转换知识点整理
- 一个过滤特殊字符的函数ASP.NET (C#)
- JavaScript中url 传递参数(特殊字符)解决方法
- C# 保存为Xml是对特殊字符的处理
- 防sql注入,将特殊字符转换成%20
- C# 过滤特殊字符
- C#,JavaScript 汉字转换为Unicode编码 Unicode编码转换为汉字
- 用JavaScript判断日期、数字、整数和特殊字符
- Oracle将字符串转换为数字,并替换特殊字符
- C#中字符编码:sql语句中包含中文字符转换为utf8编码
- JavaScript 特殊字符