服务器响应码528,编码乱码问题

1.提交表单时的编码问题

页面Get或者Post提交form表单数据时,会对表单中的中文进行编码,而编码方式是由服务器页面响

应 Header中的“Content-Type: text/html; charset=gb2312”确定的(和浏览器解码方式一致)。

不管get提交还是post提交,input控件全部都进行了GB2312编码,提交的数据为“name=%B1%B1%BE

%A9&btnSumbit=sumbmit”。修改web.config中“responseEncoding=utf-8”,发现服务器页面响应

Header中的“Content-Type: text/html; charset=utf8”,再次提交表单时编码已经成了utf-8,

内容变为“name=%E5%8C%97%E4%BA%AC&btnSumbit=sumbmit”。

观察发现,不管get提交还是post提交,HTTP请求中并没有指定服务器端的解码方式,服务器端解

码还是根据服务器配置获取的

2.浏览器地址栏编码

在浏览器中输入地址:

编码方式随浏览器不同而不同,IE11编码方式为GBK,服务器用GB2312解码正确;Firefox34.0编

码方式为utf-8,服务器GB2312解码乱码。URL中的编码依赖于浏览器,开发中不建议使用,一些

地址链接含有中文时,建议在生成链接时,对中文指定编码方式编码。

3. JQuery中的AJax提交

JQuery是一款优秀的js框架,被广泛使用,但通过AJax提交数据时,却容易出现乱码。通过测试和

分析JQuery源码,AJax请求时,推荐方式为:

1)POST请求:参数放到data中,无需对参数值编码,JQuery在构造HTTP请求时,会调用js的函数

encodeURIComponent()对data中的键值对分别进行utf-8编码,服务器用utf-8解码。url中对应的

就是url地址,不能含有参数。

即使服务器Globalization结点配置的GB2312解码,Request.Form["xxx"]也会用utf-8解码,因为

AJax的post请求中在HTTP头添加了代码“Content-Type: text/html; charset=utf8”,告诉服务器

用utf-8解码,达到编码和解码一致的目的。这点可能和我们平时想的不一样,整站配置为GB2312

编码的站点,竟然AJax的post请求都是用的utf-8编码!

2)GET请求:参数放在Url中,并按照和服务器一致的编码方式编码,如服务器配置的Globalization

结点为UTF-8,则将参数值UTF-8编码,可以调用函数encodeURIComponent();如果服务器

配置为GB2312,则将参数用GB2312编码,可以调用escape()。Get和Post请求的一大差别

是,GET请求不会改变请求的Header,Request.QueyString["xxx"]解码用的是Globaliza

tion指定的编码。

默认情况下,JQuery的AJax方法通过post提交数据,编码都是用的utf-8,通过Header

指定服务器解码方式也为utf-8,但某些特殊情况下可能想服务器用gb2312解码(现在想

来应该不需要这种场景,因为本身就不大合理,当时可能在某些不大合理的前提下确实

需要来着,还不停的百度),网上查找资料是说AJax时,添加属性“contentType: "app

lication/x-www-form-urlencoded; charset=utf-8",”个人测试IE下生效了,服务器变

成了GB2312解码,但火狐下未生效,原因未知,单步跟踪了代码都执行了,没啥问题。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值