首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > PHP >

有对JS熟习的吗,帮转换一段代码为PHP的

2012-12-31 
有对JS熟悉的吗,帮转换一段代码为PHP的。scriptvar URLEncode {map: {0: 0,1: 1,2: 2,3:

有对JS熟悉的吗,帮转换一段代码为PHP的。

<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>

[解决办法]
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懒得写了有对JS熟习的吗,帮转换一段代码为PHP的
明白原理的话自己应该也能倒腾出来了吧

热点排行