<script>
var URLEncode = {
    map: {
        '0': '0',
        '1': '1',
        '2': '2',
        '3': '3',
        '4': '4',
        '5': '5',
        '6': '6',
        '7': '7',
        '8': '8',
        '9': '9',
        '10': 'A',
        '11': 'B',
        '12': 'C',
        '13': 'D',
        '14': 'E',
        '15': 'F'
    },
    toHex: function(num) {
        var s = [];
        while ( num >= 16 ) {
            s.unshift( URLEncode.map[num % 16] );
            num = Math.floor( num / 16 );
        }
        s.unshift( URLEncode.map[num] );
        return '%' + s.join('');
    },
    exec: function(url) {
        var exp = /^([a-z]+:\/\/)([^/]*)(.*)/;
        var a, b, c, len, arr;
        arr = url.match(exp);
        a = arr[1];
        b = arr[2];
        c = arr[3];
        len = b.length;
        for (var i = 0; i < len; i++) {
           a += URLEncode.toHex(b.charAt(i).charCodeAt());
        }
        return a + (c.length ? c : '/');
    }
}
var teststr = 'http://baidu.com';
alert('加密前: ' + teststr);
alert('加密后: ' + URLEncode.exec(teststr));
alert('解密后:' + unescape(URLEncode.exec(teststr)));
</script>

解决方案 »

  1.   

    不熟悉,准备先学PHP,再学JS
      

  2.   


    我现在就是PHP会,JS头痛
      

  3.   

    var URLEncode = {
        map: {
            '0': '0',
            '1': '1',
            '2': '2',
            '3': '3',
            '4': '4',
            '5': '5',
            '6': '6',
            '7': '7',
            '8': '8',
            '9': '9',
            '10': 'A',
            '11': 'B',
            '12': 'C',
            '13': 'D',
            '14': 'E',
            '15': 'F'
        },
        toHex: function(num) {
            var s = [];
            //十进制数字转化十六进制
            while ( num >= 16 ) {
                s.unshift( URLEncode.map[num % 16] );
                num = Math.floor( num / 16 );
            }
            s.unshift( URLEncode.map[num] );
            return '%' + s.join('');//在前面添加%后返回十六进制值
        },
        exec: function(url) {
            var exp = /^([a-z]+:\/\/)([^/]*)(.*)/;//正则匹配http://和第一个/nnn之间的网址
            //http://baidu.com/abc也会返回baidu.com
            var a, b, c, len, arr;
            arr = url.match(exp);//拆分网址
            a = arr[1];
            b = arr[2];
            c = arr[3];
            alert(a);
            alert(b);
            alert(c);
            len = b.length;
            for (var i = 0; i < len; i++) {
             alert(b.charAt(i).charCodeAt());
               a += URLEncode.toHex(b.charAt(i).charCodeAt());//查询地址的每个字母的unicode值,然后转化为十六进制
            }
            return a + (c.length ? c : '/');
        }
    }
    var teststr = 'http://baidu.com';
    alert('加密前: ' + teststr);
    alert('加密后: ' + URLEncode.exec(teststr));
    alert('解密后:' + unescape(URLEncode.exec(teststr)));//unescape()方法是java方法,用于解密十六进制编码的字符串写了些注释,加了几个alert,应该能帮你理解下简单的说,就是把网站的根网址转化为unicode编码,再对该unicode转化为十六进制,最后通过%区分每一个字母。从而加密网址
    正则的作用是匹配http://直到第一个“/”之间的网址,不会对之后的子目录匹配,从而获得网站的根网址
    最后的unescape是java自带的十六进制unicode解密方法php懒得写了
    明白原理的话自己应该也能倒腾出来了吧
      

  4.   


    先谢过。我用PHP来编一下