读书人

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

发布时间: 2012-12-31 11:57:52 作者: rapoo

有对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的
明白原理的话自己应该也能倒腾出来了吧

读书人网 >PHP

热点推荐