用JavaScript实现UrlEncode和UrlDecode

<script language="vbscript">
/*利用VBScript构建asc吗和字符串的互转函数*/
Function str2asc(strstr)
 str2asc = hex(asc(strstr))
End Function
Function asc2str(ascasc)
 asc2str = chr(ascasc)
End Function
</script>


<script language="javascript">
/*这里开始时UrlEncode和UrlDecode函数*/
function UrlEncode(str){
  var ret="";
  var strSpecial="!"#$%&'()*+,/:;<=>?[]^`{|}~%";
  for(var i=0;i<str.length;i++){
   var chr = str.charAt(i);
    var c=str2asc(chr);
    tt += chr+":"+c+"n";
    if(parseInt("0x"+c) > 0x7f){
      ret+="%"+c.slice(0,2)+"%"+c.slice(-2);
    }else{
      if(chr==" ")
        ret+="+";
      else if(strSpecial.indexOf(chr)!=-1)
        ret+="%"+c.toString(16);
      else
        ret+=chr;
    }
  }
  return ret;
}
function UrlDecode(str){
  var ret="";
  for(var i=0;i<str.length;i++){
   var chr = str.charAt(i);
    if(chr == "+"){
      ret+=" ";
    }else if(chr=="%"){
     var asc = str.substring(i+1,i+3);
     if(parseInt("0x"+asc)>0x7f){
      ret+=asc2str(parseInt("0x"+asc+str.substring(i+4,i+6)));
      i+=5;
     }else{
      ret+=asc2str(parseInt("0x"+asc));
      i+=2;
     }
    }else{
      ret+= chr;
    }
  }
  return ret;
}
</script>

上一篇: GIF图形文件格式文档(二)
下一篇: [转贴]Java学习从入门到精通

访客评论

  1. #1 moocky 2006, June 28, 10:50 AM
    英文字符(不包括特殊字符:? /{}等)可以进行编码、也可以可以不必编码,所以没有更正确一说!
  2. #2 leinchu 2006, June 28, 10:49 AM
    我这个好像还要正确一些哦:

    function urlencode(str)
    tmp=""
    strSpecial="_-.1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
    for i=1 to len(str)
      crt=mid(str,i,1)
      if instr(1,strSpecial,crt,1) then  
       tmp=tmp&crt  
      else
       hexc=hex(asc(crt))
       tmp=tmp&"%"& mid(hexc,1,2)
       if len(hexc)>2 then
        tmp=tmp&"%"& mid(hexc,3,2)
       end if
      end if  
    next
    urlencode=tmp
    end function

    我和php比较过,是一样的哈
  3. #3 moocky 2006, June 28, 10:48 AM
    哈哈,多谢两位兄弟,之所以用了VBScript是因为不知道如果通过javascript获得汉字的ASCII码,而不完全适用VBScript是因为对VBScript不是很熟悉,懒得再查VBScript函数的用法了。不好意思偷了个懒,有空的时候我会把它完善一下。
  4. #4 masuz 2006, June 28, 10:48 AM
    如果用vbscript才可以实现ascii 2 str/str 2 ascii,为什么不直接用vbscript来实现全部呢?!这样javacript和vbscript混用似乎不是太完美。

    <script language="vbscript">
    function urlencode(vstrin)
        dim i,strreturn,strSpecial
        strSpecial = " <>""#%{}|^~[]`'&?+"
        strreturn = ""
        for i = 1 to len(vstrin)
            thischr = mid(vstrin,i,1)
            if abs(asc(thischr)) < &hff then
                if instr(strSpecial,thischr)>0 then
                    strreturn = strreturn & "%" & hex(asc(thischr))
                else
                    strreturn = strreturn & thischr
                end if
            else
                innercode = asc(thischr)
                if innercode < 0 then
                    innercode = innercode + &h10000
                end if
                hight8 = innercode '(innercode  and &hff00)' mod &hff
                low8 = innercode and &hff
                strreturn = strreturn & "%" & hex(hight8) &  "%" & hex(low8)
            end if
        next
        urlencoding = strreturn
    end function
    document.write(urlencode("中文 <>""#%{}|^~[]`'&?+Abc")+"<br>")
    </script>
  5. #5 dulao5 2006, June 28, 10:47 AM
    真巧,我也写了一篇相关的文章,如果这个代码使用更全面的utf8算法就更完美了:D  http://www.cublog.cn/u/12425/showart.php?id=75879

    你的手册子站里面的文章很不错,多谢了
  6. #6 js 2006, June 28, 10:47 AM
    老大,真的太好了,我找了好久了。

发表评论

评论内容 (必填):

点击获得Trackback地址
My E-mail