解决不同编码的页面之间传值乱码的问题

情况是酱紫的:

我的工程是UTF-8编码的,我需要传值给第三方页面,而这个第三方页面是GB2312编码的。

浏览器会对GET与POST传值进行编码,而这个编码的方式是根据:<meta http-equiv="Content-Type" content="text/html; charset=utf-8">,指定的页面编码来进行的。

而我将采用GET方式传值到第三方页面。

 

显而易见的,这会出现问题,我传递过去的参数是通过UTF-8编码,而第三方页面的服务器是按照GB2312的编码来转码,自然会乱码。

 

如何解决这个问题?

对于IE,可以临时设置document.charset 为GB2312,参数提交之后则还原为UTF-8。

对于FF,无document.charset属性,有document.characterSet属性,但对它设置值却无效。那FF如何解决?因为我是用的form提交,那就好说了,设置form的 accept-charset 属性。临时将accept-charset属性设置为GB2312,提交完毕之后再还原。(还有一种解决方案是通过IFrame,IFrame能不用则不用,我就不多说了。)

 

下面是我工程中的一段代码,大家可略作参考,捡From提交那段看就行了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
window.onload = function (){
     var searchKeyworBtn = document.getElementById( 'btnSearch' ),
         keywordAddBtn = document.getElementById( 'btnAdd' ),
         txtKeyword = document.getElementById( 'txtKeyword' ),
         formSearch = document.getElementById( 'form_search' ),
         baiduIndexUrl = '' ,
         spaceRegex = /\s/g;
     
     searchKeyworBtn.onclick = function (){
         var key = txtKeyword.value.replace(spaceRegex, '' ),
             inputName = txtKeyword.name,
             action = formSearch.action,
             charset = document.charset;
         
         if (!key) return ;
         
         formSearch.target = '_blank' ;
         formSearch.method = 'get' ;
         formSearch.action = baiduIndexUrl;
 
         txtKeyword.name = 'word' ;
         
         if (document.charset){
             document.charset = 'gbk' ;
         }
         else {
             formSearch.setAttribute( 'accept-charset' , 'gbk' );
         }
         
         formSearch.submit();
         
         if (document.charset){
             document.charset = charset;
         }
         else {
             formSearch.removeAttribute( 'accept-charset' );  
         }
         formSearch.target = '_self' ;
         formSearch.method = 'post' ;
         formSearch.action = action;
 
         txtKeyword.name  = inputName;
     }
     
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值