情况是酱紫的:
我的工程是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提交那段看就行了:
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;
}
}