JavaScript实现URL参数GB2312与UTF-8编码转换

作者:阿沐时间:2026-10-28 00:48:01浏览:593

本文介绍在JavaScript中解决URL传递中文参数出现乱码问题的两种编码转换方法。通过扩展String原型,分别实现UrlEncodeGB2312和UrlEncode函数,支持将字符串转换为GB2312或UTF-8编码的URL参数格式,适用于需要兼容不同服务器编码环境的Web开发场景。

JavaScript实现URL参数GB2312与UTF-8编码转换

在许多Web开发场景中,直接通过URL传递中文参数时,接收端往往无法正确解析,导致显示为乱码。为了解决这一问题,需要对中文参数进行特定的编码处理。



接下来将介绍具体的实现方案。


代码实现与使用方法

首先,新建一个名为 UrlEncode.js 的文件,并将后续提供的代码片段复制并粘贴到该文件中。


具体代码实现如下:

 
//JS版的Server.UrlEncode编码函数
String.prototype.UrlEncodeGB2312 = function () {
var str = this;
str = str.replace(/./g, function (sHex) {
window.EnCodeStr = "";
window.sHex = sHex;
window.execScript('window.EnCodeStr=Hex(Asc(window.sHex))', "vbscript");
return window.EnCodeStr.replace(/../g, "%{blogcontent}amp;");
}); 
return str;
} 
String.prototype.UrlEncode = function () {
var s = escape(this);
var sa = s.split("%");
var retV = "", retE = "";
if (sa[0] != "") {
retV = sa[0];
} 
for (var i = 1; i < sa.length; i++) {
if (sa[i].substring(0, 1) == "u") {
retV += Hex2Utf8(Str2Hex(sa[i].substring(1, 5)));
if (sa[i].length > 4)
retV += sa[i].substring(5);
} 
else retV += "%" + sa[i];
} 
return retV;
} 
function Str2Hex(s) {
var c = "";
var n;
var ss = "0123456789ABCDEF";
var digS = "";
for (var i = 0; i < s.length; i++) {
c = s.charAt(i);
n = ss.indexOf(c);
digS += Dec2Dig(eval(n));
} 
return digS;
} 
function Dec2Dig(n1) {
var s = "";
var n2 = 0;
for (var i = 0; i < 4; i++) {
n2 = Math.pow(2, 3 – i);
if (n1 >= n2) {
s += '1';
n1 = n1 – n2;
} 
else
s += '0';
} 
return s;
} 
function Dig2Dec(s) {
var retV = 0;
if (s.length == 4) {
for (var i = 0; i < 4; i++) {
retV += eval(s.charAt(i)) * Math.pow(2, 3 – i);
} 
return retV;
} 
return -1;
} 
function Hex2Utf8(s) {
var retS = "";
var tempS = "";
var ss = "";
if (s.length == 16) {
tempS = "1110" + s.substring(0, 4);
tempS += "10" + s.substring(4, 10);
tempS += "10" + s.substring(10, 16);
var sss = "0123456789ABCDEF";
for (var i = 0; i < 3; i++) {
retS += "%";
ss = tempS.substring(i * 8, (eval(i) + 1) * 8);
retS += sss.charAt(Dig2Dec(ss.substring(0, 4)));
retS += sss.charAt(Dig2Dec(ss.substring(4, 8)));
} 
return retS;
} 
return "";
} 

使用方法非常简单,只需调用(字符串.UrlEncode())即可将字符串转换为UTF-8编码的URL参数;若需转换为GB2312编码的参数,则调用(字符串.UrlEncodeGB2312())。这种方法操作便捷,能有效解决中文参数传递问题。

作者最新文章