文档章节

不同编码页面之间用form传值出现乱码问题解决方案 utf-8 到 gb2312

____追梦人
 ____追梦人
发布于 2015/02/05 13:24
字数 1025
阅读 13
收藏 0

相信有人也曾遇到过这种问题,今天将这个问题稍作整理发布出来。

 

由于编码的问题传值出现乱码,一看到这样的情况,我们首先想到的是线面的两种解决办法:

 

方案一:在接收参数页面进行转码  (这是较为理想的解决办法)

方案二:改变提交页面的编码方式

 

 

以上解决办法,如果让我选择,那当然选择方案一了。可是我是一名页面制作人员,无法处理开发的程序,所以再来看方案二。

 

具体遇到的问题在这里 http://zhidao.kaiyun.china.com/browse_rank.do?channelId=0  右侧的表单提交

该列表页以及详细页面均会提交数据,看了这么多的页面,再想 有可能别的地方还会遇到不同编码传递数据的问题,所以很显然 方案二并不是很理想。

 

有没有一种办法是在提交数据之前将内容转码后再提交呢?这样既不用通过开发调整接收端程序,也不用改变页面原有的编码。

 

有了这种念头,自然想到用JS来实现。

 

太美好了!在JS中所提供的document.charset可以做到这一点,不过这个方法只局限于IE使用,要兼容Firefox及其他浏览器需要用到另外一种方法 form.acceptCharset (该方法属性由王昊提供)

 

以上两种方法在使用中必须注意,charset方法使用document就可以,不过acceptCharset必须指定到该form才可以正常使用。

 

以下是实际应用的代码:(将代码保存为html格式即可预览)

<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ />
<!–  姓名五格配对  –>
      <SCRIPT language=javascript>
<!–
function CheckPD(theForm)
{
var name1 = theForm.name1.value;
if (name1 == “”)
{
alert(“请输入您的姓名!”);
theForm.name1.value=”";
theForm.name1.focus();
return false;
}
if (theForm.name1.value.length < 2 || theForm.name1.value.length>4)
{
alert(“错误:名字应在2-4个字之间!”);
theForm.name1.focus();
return (false);
}
if (name1.search(/[`1234567890-=\~!@#$%^&*()_+|<>;':",.?/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]/) != -1)
{
alert(“请务必输入简体汉字!”);
theForm.name1.value = “”;
theForm.name1.focus();
return false;
}
var name2 = theForm.name2.value;
if (name2 == “”)
{
alert(“请输入您爱人的名字!”);
theForm.name2.value=”";
theForm.name2.focus();
return false;
}
if (theForm.name2.value.length < 2 || theForm.name2.value.length>4)
{
alert(“错误:名字应在2-4个字之间!”);
theForm.name2.focus();
return (false);
}
if (name2.search(/[`1234567890-=\~!@#$%^&*()_+|<>;':",.?/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]/) != -1)
{
alert(“请务必输入简体汉字!”);
theForm.name2.value = “”;
theForm.name2.focus();
return false;
}
setTimeout(function(){document.charset=’UTF-8′;document.form2.acceptCharset=’UTF-8′},1);
}
//–>
</SCRIPT>
       <form name=”form2″ onSubmit=”document.charset=’gb2312′;document.form2.acceptCharset=’gb2312′; return CheckPD(this);” method=”post” target=”_blank” action=”http://suanming.kaiyun.china.com/qinglv/pd_xmwg.asp” >
       <input type=”hidden” name=”act” value=”ok” />
        <div class=”rigth_Mass”>
          <h3><img src=”/images/page2_titPeidui.gif” /></h3>
          <div class=”DailyWealth”>
            <div>姓名:<input name=”name1″ type=”text” id=”name1″ size=”3″ maxLength=”4″> <select name=”xing1″><option value=”1″ selected=”selected”>单姓</option><option value=”2″>复姓</option>
    </select> <select name=”sex1″><option value=”男” >男</option><option value=”女” >女</option></select></div>
    <div>姓名:<input name=”name2″ type=”text” id=”name2″ size=”3″ maxLength=”4″> <select name=”xing2″><option value=”1″>单姓</option><option value=”2″>复姓</option></select> <select name=”sex2″><option value=”男” >男</option><option value=”女” selected >女</option></select></div>
    <div style=”text-align:center;”><input type=”image” src=”/images/page2_button06.gif” align=”absmiddle” name=”Submit” /></div>
          </div>
        </div>
      </form>

以上案例中要注意 form 的onSubmit执行了我之前讲到的两种方法,可是在IE下面所执行的是document.charset 该方法是全局性的,所以改变了整个页面的编码格式,由于UTF-8和gb2312两者对字符的默认解释不通,所以整个页面会出现意想不到的变化。这个时候 我们在CheckPD()函数中加了最后一句 setTimeout 这个方法,让其在1毫秒之后又改变回原来的编码格式。这样做之后在提交表单时真个页面给人的感觉是小闪一下(这是目前存在的BUG还未解决)

 

OK! 到目前为止上面这段代码已经可以在市场上的主流浏览器中正常使用了。

以上方法如果您觉得不完美,或者您有更好的解决办法请回复描述一下您的方法,让我们共同进步。


本文转载自:http://www.imf7.com/archives/5

____追梦人
粉丝 18
博文 123
码字总数 21429
作品 0
青岛
Android工程师
私信 提问
jquery ajax post提交数据乱码

在用jquery处理html5的应用的时候,一直在firefox下测试都正常,用户用pad访问的时候说有乱码, 自己试验了下果然,后发现chrome和ie内核下都是有此问题,此问题设置了页面属性为utf-8时候,...

猴亮屏
2014/11/25
150
0
servlet 中文乱码问题及解决方案

一、常识了解 1.GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立; 2.java.nio.charset.Charset.defaultCharset() 获得平台默认字符编码; 3.getBytes() 是通过平台默...

三番水
2013/05/31
701
0
VIM查看中文编码文件显示为乱码的解决办法

修改你的.vimrc文件,让其支持 gb2312就行,会自动识别的。 可以参考我的设置 代码: "设定文件编码类型,彻底解决中文编码问题 let &termencoding=&encoding set fileencodings=utf-8,gbk,uc...

ldhshao
2013/06/17
240
0
Java程序员从笨鸟到菜鸟之(二十三)常见乱码解决以及javaBean基础知识

乱码问题应该是做javaWeb开发人员都遇到过的问题吧,这个问题当时还影响了我学习java的想法,甚至有过想放弃的想法,没办法,当时年轻,呵呵。其实产生乱码问题的原因有很多,解决乱码的问题...

长平狐
2012/11/12
196
1
JSP表单提交中文时出现乱码

一、JSP页面显示乱码 下面的显示页面(display.jsp)就出现乱码: JSP的中文处理 <% out.print("JSP的中文处理"); %> 对 不同的WEB服务器和不同的JDK版本,处理结果就不一样。原因:服务器使用...

xiaodaiyy11
2011/11/17
4K
2

没有更多内容

加载失败,请刷新页面

加载更多

前端技术之:Prisma Demo服务部署过程记录

安装前提条件: 1、已经安装了docker运行环境 2、以下命令执行记录发生在MackBook环境 3、已经安装了PostgreSQL(我使用的是11版本) 4、Node开发运行环境可以正常工作 首先需要通过Node包管...

popgis
今天
5
0
数组和链表

数组 链表 技巧一:掌握链表,想轻松写出正确的链表代码,需要理解指针获引用的含义: 对指针的理解,记住下面的这句话就可以了: 将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指...

code-ortaerc
今天
4
0
栈-链式(c/c++实现)

上次说“栈是在线性表演变而来的,线性表很自由,想往哪里插数据就往哪里插数据,想删哪数据就删哪数据...。但给线性表一些限制呢,就没那么自由了,把线性表的三边封起来就变成了栈,栈只能...

白客C
今天
43
0
Mybatis Plus service

/** * @author beth * @data 2019-10-20 23:34 */@RunWith(SpringRunner.class)@SpringBootTestpublic class ServiceTest { @Autowired private IUserInfoService iUserInfoS......

一个yuanbeth
今天
5
0
php7-internal 7 zval的操作

## 7.7 zval的操作 扩展中经常会用到各种类型的zval,PHP提供了很多宏用于不同类型zval的操作,尽管我们也可以自己操作zval,但这并不是一个好习惯,因为zval有很多其它用途的标识,如果自己...

冻结not
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部