如何在IE5上实现encodeURI和encodeURIComponent函数
最近在负责公司WebUI转UTF-8编码的工作,当以GET方式传递参数时,出现中文参数会造成CGI分析参数错误,所以必须对中文字符进行URL编码。
但是 IE5是不支持encoudeURI和encodeURIComponent这两个编码的函数的,为了让WebUI兼容IE5版本,需要自己实现这两个函数。
以下代码摘抄自网络,但是原代码存在不完善的地方,我对此进行了修改:
if(typeof encodeURIComponent!='function')
{
var encodeURIComponent=function(s)
{
var result=[];
var len=s.length;
for(var i=0;i<len;i++)
{
if(code == 33
|| (code >= 39 && code <= 42)
|| code == 45
|| code == 46
|| (code >= 48 && code <=57)
|| (code >= 65 && code <= 90)
|| code == 95
|| (code >= 97 && code <= 122)
|| code == 126)
{
result.push(s.charAt(i));
}
else
{
result.push(encodeChar(s.charCodeAt(i)));
}
}
return result.join("");
}
}
if(typeof encodeURI!='function')
{
var encodeURI=function(s)
{
var result=[];
var len=s.length;
for(var i=0; i<len; i++)
{
var code = s.charCodeAt(i);
if(code == 33
|| code == 35
|| code == 36
|| (code >= 38 && code <= 59)
|| code == 61
|| (code >= 63 && code <= 90)
|| code == 95
|| (code >= 97 && code <= 122)
|| code == 126)
{
result.push(s.charAt(i));
}
else
{
result.push(encodeChar(code));
}
}
return result.join("");
}
}
function encodeChar(code)
{
if(code<16)
return "%0"+code.toString(16).toUpperCase();
var iByte=0;
var i=0;
result="";
while(code>0x7f)
{
iByte=code%0x40;
code=(code-iByte)/0x40;
result="%"+(iByte|0x80).toString(16).toUpperCase()+result;
i++;
}
prefix=[0x0,0xc0,0xe0,0xf0,0xf8,0xfc];
if(i>prefix.length)
{
i=5;
}
result="%"+(code|prefix[i]).toString(16).toUpperCase()+result;
return result;
}

浙公网安备 33010602011771号