藏井阁

" Scientists ask why, engineers ask why not? "

将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>

类别: Web开发

Tags: GB2312编码,UTF-8编码

damon pang

大魔

Damo

i#impng.com

专注Web开发,爱电影,爱One Piece.