博主这几天在捣鼓爬虫,不可避免的需要去模拟一些网站变态的加密算法(顺便吐槽一句:你们这些网站真的很不友善!)。
既然是加密算法那么位运算就是不可或缺的了。相比较javascript而言,PHP没有>>>这种无符号右移的运算符,而且就算是普通的<<左移和>>右移运算符,PHP算出来的结果也会不同于javascript。所以只能打模拟js位移运算符的主意了。
上网爬了一圈,在stackoverflow上发现一篇帖子(传送门)在聊这个问题,帖子里有贴一些>>>运算符实现的代码。遗憾的是我没能看懂,只能自己来撸一个了(已回复该帖,有缘的朋友给个up吧)。
然后的然后就有了下面的代码。各位如果有同样的困惑尽管拿去用(每个函数都配合nodejs做了10w+次的测试,应该没问题)。
/**
* >>> javascript operator in php x86_64
* @param int v
* @param intn
* @return int
*/
function rrr(v,n)
{
return (v&0xFFFFFFFF) >> (n & 0x1F);
}
/**
* >> javascript operator in php x86_64
* @param int v
* @param intn
* @return int
*/
function rr(v,n)
{
v =v & 0x80000000 ? v | 0xFFFFFFFF00000000 :v & 0xFFFFFFFF;
return v >> (n & 0x1F);
}
/**
* << javascript operator in php x86_64
* @param int v
* @param intn
* @return int
*/
function ll(v,n)
{
t = (v & 0xFFFFFFFF) << (n&0x1F);
returnt & 0x80000000 ? t | 0xFFFFFFFF00000000 :t & 0xFFFFFFFF;
}
附送一个PHP对javascript逗号运算符(,)的模拟,你懂的。
转换效果(js to PHP):
if (i = 0, j = 1, k =2) {}
toif (comma(i = 0,j = 1, $k = 2)) {}
/**
* @param ...
* @return mixed
*/
function comma()
{
args = func_get_args();
return end(args);
}
最后,为什么用PHP来做爬虫?
- PHP是世界上最好的语言,不接受任何反驳。
- PHP的语法和javascript比较像,我想移植要容易一些吧。
- 我只会PHP,你们满意了吗?
为了避免代码出现横向滚动条,请假装缩进是4个空格~
这不是一样吗?
为啥我找不到php的工作,求指点
再多学点。