JavaScript 中实现 ANSI(gb2312) 的 URL 编码与解码(URLEncode、URLDecode)

作者:vkvi整理 来源: 日期:2009-3-27

encodeURI 和 encodeURIComponent 是按 UTF-8 对 URL 编码的,下面的代码是按 ANSI 对 URL进行编码和解码的。使用了两个 vbscript 自定义函数,请参见 JavaScript 函数如何调用 VBScript 函数

以下整理自 Moocky.Mark's Blog。

<script type="text/vbscript">
<!--
function str2asc(strstr)
    str2asc   =   hex(asc(strstr))
end function
 
function   asc2str(ascasc)
    asc2str   =   chr(ascasc)
end function
'-->
</script>
 
 
<script type="text/javascript">
<!--
function urlEncode(str)
{
    var ret = "";
    var strSpecial = "!\"#$%&’()*+,/:;<=>?[]^`{|}~%";
    var tt = "";
    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>

相关阅读

相关文章