chenzhuoyou

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

如何在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;


posted on 2008-08-29 21:55  Chen Zhuoyou  阅读(456)  评论(0)    收藏  举报