当前位置:编程问答 > JS >

网页表单提交的转码问题GB2312转UTF8或者utf-8转gbk解决方法

给form增加参数就可以了,如果utf-8到gb2312增加accept-charset="GBK"  onsubmit="document.charset='GBK'"
如果是gb2312向utf-8提交则增加accept-charset="utf-8"  onsubmit="document.charset='utf-8'"
如果onsubmit还有其他参数直接填进去例如 onsubmit="document.charset='utf-8';checkform;"

详细介绍如下:

<form action="http://www.zhaoxi.org/" name="f"  accept-charset="GBK"  onsubmit="document.charset='GBK'" target="_blank">

从gb2312页面提交到utf-8页面乱码

form提交时的字符编码转换之utf-8转gb2312 

 
当想gb2312从页面提交表单至utf-8时,问题就来了。解决方案:


在gb2312页面的form中添加:accept-charset="utf-8" onsubmit="document.charset='utf-8';",如:
<form method="post" action="2.php" accept-charset="utf-8" onsubmit="document.charset='utf-8';">
这样一来,ie、ff、opera、google等主流浏览器都欣然接受了。但是当提交后直接后退这又出现新问题了,form页面变成乱码,别怕,再在gb2312页面的<head></head>之间加上如下代码:
<script>
if(document.charset!="gb2312" && navigator.userAgent.indexOf("MSIE")>0){
       window.location.reload();
}
</script>

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


浏览器internet服务器firefoxie文档
利用

标签的“accept-charset”属性,在不同编码的页面间提交表单。 accept-charset 属性介绍 accept-charset 属性规定服务器处理表单数据所接受的字符集,允许您指定一系列字符集,服务器必须支持这些字符集,从而得以正确解释表单中的数据。该属性的值是用引号包含字符集名称列表。如果可接受字符集与用户所使用的字符即不相匹配的话,浏览器可以选择忽略表单或是将该表单区别对待。此属性的默认值是 "unknown",表示表单的字符集与包含表单的文档的字符集相同。除了 Internet Explorer,accept-charset 属性得到几乎所有浏览器的支持。 问题背景: 两个应用编码不同,一个是GBK编码,另一个是UTF-8编码。现在要在GBK编码的应用里使用表单向UTF-8编码的应用里提交数据,很显然,如果不做特殊处理的话,会出现乱码。 解决方案: 当然了,可以自己使用ICONV或者MB扩展来转换编码,但这不是我们要的。 在W3里介绍了一个不太常见的属性:accept-charset,用它可以完成我们的需求。 在GBK编码的页面里编写如下代码:
...
如此的代码在Firefox等正常的浏览器下没有任何问题,但是遇到IE这个变态浏览器就不灵光了,我们还得用点不入流的手段Hack一下:

...
再比如我们一个utf-8页面向一个GB2312的页面提交表单,我们可以在utf-8的页面中修改form的属性

...
[转自:http://www.ban102.com.cn/article/detail.asp?id=4314] 后补: 问题的描述:从gb2312进行form(js输出的表单)的post到utf-8之后,点ie浏览器的后退按钮,gb2312的页面会出现乱码。 问题的原因:ie的处理本来是特殊的,然后再退回来,页面的编码变成utf-8了。大家都知道点后退,页面被缓存了,只有js被重新执行。如果那个表单正好是js输出的那就有问题了。js文件的编码也要指定(特别是两类编码的文件相互调用/引用的时候)。 解决的方法:第一步:在gb2312的页面,对引入的js中,添加编码设置(主要解决ie6的问题)

===============================

javascript解决gb2312向utf-8提交表单成乱码

gb2312的页面里有个表单,要向一个utf-8的页面里提交数据,结果中文成了乱码,其实这个问题我们可以通过javascript解决,只需以下代码即可:
document.charset="gb2312";
document.form1.submit();
既在提交前转码。
但需要注意的事,document.charset仅IE和webkit(Safari 3、Chrome)支持。FF和Opera不行,不过FF和Opera支持accept-charset属性:
<form accept-charset="gb2312">
...
</form>

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,