PHP 模拟 JavaScript 的位移运算符
博主这几天在捣鼓爬虫, 不可避免的需要去模拟一些网站变态的加密算法(顺便吐槽一句: 你们这些网站真的很不友善!).
既然是加密算法那么位运算就是不可或缺的了. 相比较 JavaScript 而言, PHP 没有>>>这种无符号右移的运算符, 而且就算是普通的 <> 右移运算符, PHP 算出来的结果也会不同于 JavaScript. 所以只能打模拟 JS 位移运算符的主意了.
上网爬了一圈, 在 Stack Overflow 上发现一篇帖子 (传送门) 在聊这个问题, 帖子里有贴一些>>>运算符实现的代码. 遗憾的是我没能看懂, 只能自己来撸一个了(已回复该帖, 有缘的朋友给个 up 吧).
然后的然后就有了下面的代码. 各位如果有同样的困惑尽管拿去用(每个函数都配合 Node.JS 做了 10w + 次的测试, 应该没问题)./**
*>>> JavaScript operator in PHP x86_64
* @param int $v
* @param int $n
* @return int
*/
functionrrr($v,$n)
{
return($v&0xFFFFFFFF)>>($n&0x1F);
}
/**
*>> JavaScript operator in PHP x86_64
* @param int $v
* @param int $n
* @return int
*/
functionrr($v,$n)
{
$v=$v&0x80000000?$v|0xFFFFFFFF00000000:$v&0xFFFFFFFF;
return$v>>($n&0x1F);
}
/**
* << JavaScript operator in PHP x86_64
* @param int $v
* @param int $n
* @return int
*/
functionll($v,$n)
{
$t=($v&0xFFFFFFFF)<
return$t&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
*/
functioncomma()
{
$args=func_get_args();
returnend($args);
}
最后, 为什么用 PHP 来做爬虫?
PHP 是世界上最好的语言, 不接受任何反驳.
PHP 的语法和 JavaScript 比较像, 我想移植要容易一些吧.
我只会 PHP, 你们满意了吗?
为了避免代码出现横向滚动条, 请假装缩进是 4 个空格~
来源: http://www.bubuko.com/infodetail-3201798.html