html表单提交数据库乱码,用js提交(post)数据后中文变乱码的解决办法

问题描述:

使用vs.net2005开发,所有文件默认新建时的文件编码为:aspx文件是gb2312,cs、js文件是utf-8

我的网站使用的统一编码是gb2312,在web.config里设置了:

我在js里,向aspx页面提交数据,想要从这个页面获取返回值,然后呢,如果我提交的数据是中文,在aspx.cs页面里获取的数据就会变成乱码

最快手的解决办法:

把网站统一编码改成utf-8,就是故意设置网站统一编码,肯定是有原因的,对不对?这样子改法,要求整个网站都统一了。。。

没用的解决办法:

我试过在提交文件时,js里设置

request.setRequestHeader("contentType","text/html;charset=gb2312");

然后呢,我把所有相关文件,调用js的aspx页面和它的cs文件、js文件、接收文件和它的cs文件全部指定编码是gb2312另存

我还试过在js里用各种方法加密参数,在cs里使用Server.UrlDecode解码,还是乱码

最后想到的是要指定编码解码,就是,我熟悉的UrlDecode和HtmlDecode都只有两个重载,不可以指定编码解码,大猫找到HttpUtility.UrlEncode,问题解决

解决办法:

在js里指定编码提交数据,对要提交的数据要进行两次加密

在aspx.cs里,要指定编码对获取的数据解码

原因:

Request.Form获取数据时,默认已经对数据进行一次解码了的,如果在js里只加密一次,在aspx.cs页面里获取的数据就是直接乱码,只有加密两次,才可以获取到已编码的数据,才可以对数据进行指定编码解码

代码:

js文件:

submitData("文件名", "myValue='中国'");

//提交数据:参数、地址

function submitData(submitPage, parmAndValue)

{

//使用表单请求页面

request = new createXMLHttpRequest();

request.open("POST", submitPage, false);

request.setrequestheader("cache-control","no-cache");

request.setRequestHeader("Content-Type","application/x-www-form-urlencoded")

request.setRequestHeader("contentType","text/html;charset=utf-8");

request.setRequestHeader("RequestType","ajax");

//提交,二次编码,防止request.form默认解码

parmAndValue = encodeURI(parmAndValue);

parmAndValue = encodeURI(parmAndValue);

request.send(parmAndValue);

//取返回的字条串返回

var result = request.responseText;

return result;

}

//创建XMLHttpRequest对象

function createXMLHttpRequest() //创建XMLHttpRequest对象

{

if (window.ActiveXObject)   // IE下创建XMLHTTPREQUEST

{

xhr = new ActiveXObject("Microsoft.XMLHTTP");

}

else if (window.XMLHttpRequest)   // 其他浏览器创建XMLHTTPREQUEST

{

xhr = new XMLHttpRequest();

}

return xhr;

}

aspx.cs文件:

string myValue;

myValue = Request.Form["myValue"];

Response.Write("接收:myValue=" + myValue + "\n");

myValue = System.Web.HttpUtility.UrlDecode(myValue, System.Text.Encoding.UTF8);

//myValue = Server.UrlDecode(myValue);

Response.Write("解码:myValue=" + myValue + "\n");

Response.End();

记录一些网址:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值