情况是酱紫的:
我的工程是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;
}
}
|