用form提交不同编码的数据及在IE下解决办法

来源:互联网 发布:西班牙语软件哪个好 编辑:程序博客网 时间:2024/05/21 15:14

用form提交不同编码的数据及在IE下解决办法

今天要给某phpwind论坛调整用户登录方式,颇为棘手。该系统结构较为复杂(历史原因),gbk编码的ucenter;utf-8编码的phpcms;gbk编码的phpwind论坛;通行证系统使用我们开发的ucenter扩展登录系统来兼容phpwind论坛。原来论坛是没有登录的,全部跳转到通行证登录。现在要给论坛加个快速登录栏(将用论坛默认的快速登录栏),要求是激活通行证并返回所在论坛页。我们之前尽量避免不同编码的cms和论坛进行交互,所以计划开发phpwind激活ucenter的插件。

人总是想偷懒的,先试试把用户名、密码、返回地址直接交给phpcms进行登录。搞了半天它不接收,诧异了~~最后查出是要给submit按钮加上name="dosubmit" 囧~~

接着就是把数据转换编码然后提交过去(我不知道有个叫accept-charset的属性),网上找了个转编码的js函数,运行完,假的。通过搜索发现了form表单有个accept-charset属性,用来设置表单提交时的编码。哇~~幸运!

在IE下解决办法其实html里面form标签有个accept-charset属性,可以帮助我们解决这个问题,可惜的是傻乎乎的IE浏览器虽然认得accept-charset,却并不卖它的帐。IE的表单提交的时候使用什么编码是完全看页面的charset决定的。还好,IE在charset这个问题上一傻到底,糊弄它一下,它就乖乖听话了:

<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>

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

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


转载至:http://hi.baidu.com/luck_sq/item/81f87918e62b4e406826bb4f
原创粉丝点击