将UTF-8转换为GB2312的js实现
描述:mailto可以方便的调用客户端的邮件发送程序,例如outlook、foxmail等,但是这些客户端一般都只接收GB2312编码,如果在一个页面编码为utf-8的页面中调用mailto,那么发送的将是乱码,或者经常出现的“锟斤拷”乱码。
最简单的方式是将整站页面都使用GB2312编码。这里提供的方法不需要更改全站的编码,思路为:采用js的方式实现转码为GB2312,发送形如”%AC%23%A2%AC”的即可在邮件客户端正常显示。
由于UTF-8转换为GB2312的过程当中,关键部分采用了Vbscript实现,即vb_utf2gb=hex(asc(char)),因此,该方法只适用于IE浏览器。更好的实现方法需要在程序逻辑中进行转码,采用<input type=”hidden” value=”GB编码的值” />方式传送到页面。
上代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>UTF转GB2312</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="keywords" content="" />
<meta name="description" content="" />
<link rel="stylesheet" type="text/css" media="screen" href="" />
<script type="text/javascript" src=""></script>
</head>
<body>
<textarea cols="30%" rows="10" id="input"></textarea>
<input type="button" value="UTF-8 <-> GB2312" id="translate" />
<textarea cols="30%" rows="10" id="output"></textarea>
</body>
</html>
<script type="text/vbscript">
function vb_utf2gb(char)
vb_utf2gb=hex(asc(char))
end function
</script>
<script type="text/javascript">
$ = function(id) {
return document.getElementById(id);
}
function formatUTF(str) {
str=decodeURI(str);
var result = '';
var i;
for(i=0; i<str.length; i++) {
var c = str.charCodeAt(i);
result += vb_utf2gb(str.charAt(i));
}
return result;
}
function formatGB(str){
str = encodeURIComponent(str);
str = formatUTF(str);
var result = '';
for(i=0; i<str.length; i+=2) {
result = result + '%' + str.substr(i,2);
}
return result;
}
$('translate').onclick = function() {
if($('input').value) {
mailBody = formatGB($('input').value);
$('output').value = mailBody;
url = 'mailto:impng.p@gmail.com?subject=impng.com&body=' + mailBody;
location.href = url;
} else {
alert('没有输入!');
}
};
window.onload = function() {
$('input').value = "impng.com";
}
</script>