想做个友情链接的检测方法,检测对方网站是不是有我的网站的友情链接,也就是判断是否有我网站的地址;例如:我的网站的地址是www.csdn.net,但是有些网站有时候会在链接里面加个rel="nofollow",这样友情链接就没有意义了;正则没好好学,问下怎么才能检测出是否加了这个呢?
有好几种情况,例如:<a rel="nofollow" href="http://www.csdn.net">csdn</a><a target="_blank" rel="nofollow" href="http://www.csdn.net">csdn</a><a target="_blank" rel="nofollow" href="http://www.csdn.net">csdn</a><a rel="nofollow" href="http://www.csdn.net" target="_blank">csdn</a><a  href="http://www.csdn.net" target="_blank" rel="nofollow">csdn</a>以下是我在网上找的别人检测地址的代码:
$out=strtolower(@file_get_contents(http://www.xxx.com));
  if($out){
  $out=str_replace("\r\n","",$out);
  $out=str_replace("\r","",$out);
  $out=str_replace("\n","",$out);
  $havelink=preg_match_all('/<a(.*?)href=(.*?)http://www.csdn.net(.*?)>(.*?)<\/a>/i', $out, $m);
   
  if($havelink||strstr($robots,'nofollow')){
                         echo "友情链接存在";}
                   }求高手帮忙

解决方案 »

  1.   

    迂回一下,正则我也很弱,找出和自己相关的链接,然后判断是否存在关键代码
    $array = <<<HTML
    <a rel="nofollow" href="http://www.csdn.net">csdn</a>
    <a target="_blank" rel="nofollow" href="http://www.csdn.net">csdn</a>
    <a target="_blank" rel="nofollow" href="http://www.csdn.net">csdn</a>
    <a rel="nofollow" href="http://www.csdn.net" target="_blank">csdn</a>
    HTML;
    preg_match_all('/(<a.*href="http:\/\/www.csdn.net".*csdn<\/a>)/is', $array, $match);
    if (isset($match[1])) {
        foreach ($match[1] as $html) {
            if (stripos($html, 'rel="nofollow"') !== FALSE)
                echo 'bad!';
            break;
        }}