文章内容中随机插入防采集混淆字段
采集和防采集两个一直在较劲这,从未停止过。。
应客户的要求,给他网站加了一个防采集的功能,用的是比较原始的方法:加入混淆字段。。
这种方法不可以严格的禁止采集,但会让采集到的内容多许多你自定义的文字,也算变相打广告了。
采集这事吧,当你采集别人的时候,别人搞的干扰多了你也烦。你自己搞的站防采集吧,说实话好像没有有效的方法。。。
IP了,速度了,cookie了,UA了,这些都没啥用(可能想到的比较少,欢迎大家留言讨论),像这种加干扰文字的也就是在阅读上干扰了,搜索引擎可能会认为你的页面质量不高。
但这种方法也有弊端的,就是对SEO不是很友好。总之有利有弊吧。这功能甲方爸爸要求的,某得办法哈。
分享给大家,想用的就用吧,,,,
DEMO:
<?php $body='<p>第一段文字,无span</p><p>第二段文字,<span>有span</span></p><p>第三段文字,<span>有span</span></p><p>第四段文字,无span</p><p>第五段文字,无span</p><p>第六段文字,<span>有span</span></p>'; function rndString($body,$rnd=array()){ $num=substr_count($body,'</p>'); $num+=substr_count($body,'<br>'); $num+=substr_count($body,'<br/>'); $num+=substr_count($body,'</span>'); $findNum=0; $rndNum=1; //当有40个判断标签(p span br)的时候,插入5个混淆码 if($num >= 40){ $limit=5; }elseif($num >= 12){ $limit=3; }elseif($num >= 8){ $limit=2; }else{ $limit=1; } $adNum=floor($num/$limit); $body=preg_replace_callback('/(</p>|<br>|<br/>|</span>)/', function($matches)use($adNum, $rnd, &$findNum, &$rndNum){ $findNum++; if($findNum == ($rndNum * $adNum)){ $randstr=isset($rnd[$rndNum - 1]) ? $rnd[$rndNum - 1] : $rnd[array_rand($rnd)];//匹配不到对应的数据时,随机获取一个 $rndNum++; return $matches[1].'<font>'.$randstr.'</font>'; }else{ return $matches[1]; } }, $body); return $body; } $body=rndString($body,array('<a href="http://www.webstr.top">我是第一个混淆码,我有链接</a>','我是第二个混淆码','我是第三个混淆码','我是第四个混淆码','我是第五个混淆码')); echo $body; ?>
有 0 位网友评论: