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