用form提交不同utf8 gb2312编码的数据乱码

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

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

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

<form action="..." accept-charset="utf-8" method="post">
...
</form>

这个属性在Firefox下正常,ie下不能用,又要鄙视ie了
最后通过一个小技巧来解决了ie下不支持accept-charset的问题,就是在表单提交时改变整个页面的编码(onsubmit="document.charset='utf-8';")

<form action="..." accept-charset="utf-8" onsubmit="document.charset='utf-8';" method="post">
...
</form>

测试通过,OK~~大功告成