从gb2312页面提交表单到utf-8页面

作者: 伊缘 分类: ||技术安全|| 发布时间: 2012-06-07 09:31

从gb2312页面提交表单到utf-8页面
利用form的“accept-charset”在不同编码的页面间提交表单
accept-charset

HTML <form> 标签的 accept-charset 属性
定义和用法
accept-charset 属性规定服务器处理表单数据所接受的字符集。
accept-charset 属性允许您指定一系列字符集,服务器必须支持这些字符集,从而得以正确解释表单中的数据。
该属性的值是用引号包含字符集名称列表。如果可接受字符集与用户所使用的字符即不相匹配的话,浏览器可以选择忽略表单或是将该表单区别对待。
此属性的默认值是 “unknown”,表示表单的字符集与包含表单的文档的字符集相同。
提示:请避免使用该属性。应该在服务器端验证文件上传。
浏览器支持
除了 Internet Explorer,accept-charset 属性得到几乎所有浏览器的支持。
注释:accept-charset 属性无法在 Internet Explorer 中正确地工作。如果
accept-charset 属性设置为 “ISO-8859-1″,IE 将发送以 “Windows-1252″
编码的数据。

一个很少用到的表单属性,利用它实现在不同编码的页面里实现表单的提交也是一种很方便的解决方法。转自老王的baidu空间,记录在此。
作者:老王
问题背景:
两个应用编码不同,一个是GBK编码,另一个是UTF-8编码。现在要在GBK编码的应用里使用表单向UTF-8编码的应用里提交数据,很显然,如果不做特殊处理的话,会出现乱码。
解决方案:
当然了,可以自己使用ICONV或者MB扩展来转换编码,但这不是我们要的。
在W3里介绍了一个不太常见的属性:accept-charset,用它可以完成我们的需求。
在GBK编码的页面里编写如下代码:
<form method=”post” action=”…” accept-charset=”utf-8″>

</form>
如此的代码在Firefox等正常的浏览器下没有任何问题,但是遇到IE这个变态浏览器就不灵光了,我们还得用点不入流的手段Hack一下:
<form method=”post” action=”…” accept-charset=”utf-8″
onsubmit=”document.charset=’utf-8′;”>

</form>

再比如我们一个utf-8页面向一个GB2312的页面提交表单,我们可以在utf-8的页面中修改form的属性
<form method=”post” action=”…” accept-charset=”GB2312″
onsubmit=”document.charset=GB2312;”>

</form>