在IE下面指定表单编码方式

在跨业务、跨网站发送数据或者业务升级的时候,我们有的时候需要指定发送数据的编码方式,比如页面是utf-8编码的,而发送出去的数据却是GB2312编码的。在做Ajax开发的时候,我们往往都是用vbscript或者用查字典法来解决这个问题( http://www.blogjava.net/emu/articles/31756.html)。但是有些业务,也许并不需要做成Ajax这么复杂,用表单提交显得更加自然。

其实html里面form标签有个accept-charset属性,可以帮助我们解决这个问题,可惜的是傻乎乎的IE浏览器虽然认得accept-charset,却并不卖它的帐。IE的表单提交的时候使用什么编码是完全看页面的charset决定的。还好,IE在charset这个问题上一傻到底(见 http://www.blogjava.net/emu/archive/2007/08/21/138247.html),糊弄它一下,它就乖乖听话了:
< HTML >
< HEAD >
   
< meta http-equiv =content-type content ="text/html; charset=UTF-8" >
   
< SCRIPT LANGUAGE ="JavaScript" >
       
var isIE =!! window.ActiveXObject;
       
if (isIE && document.charset != " utf-8 " )location.reload( false );
       
if (location.search) alert( " “我”字编码为: " + location.search.substr( 6 ))
   
</ SCRIPT >
   
< TITLE > encode before form post </ TITLE >
   
< META NAME ="Author" CONTENT ="emu" >
</ HEAD >
< BODY >
   
< form action ="#" accept-charset ="GB2312" onsubmit ="if(isIE)document.charset='GB2312'" >
       
< input name ="test" value ="我" readonly >
       
< input type =submit >
   
</ form >
</ BODY >
</ HTML >

简单的讲,就是在表单发送前告诉IE说当前页面是GB2312编码就行了:
<form accept-charset="GB2312" οnsubmit="if(isIE)document.charset='GB2312'">
accept-charset="GB2312" 是写给其他没那么笨的浏览器看的。

IE为了表现它确实是一傻到底,不但在设置document.charset的时候不会用新的编码解释页面,还会在前进后退(我特地用#作为action来实现后退)的时候又尝试用新的编码去解释页面 。不过还好,可以用脚本判断出来,还可以用脚本刷新一下页面解决这个问题:
if(isIE && document.charset!="utf-8")location.reload(false);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值