php - How to add rel="nofollow" to links with preg_replace() -


the function below designed apply rel="nofollow" attributes external links , no internal links unless path matches predefined root url defined $my_folder below.

so given variables...

$my_folder = 'http://localhost/mytest/go/'; $blog_url = 'http://localhost/mytest'; 

and content...

<a href="http://localhost/mytest/">internal</a>  <a href="http://localhost/mytest/go/hostgator">internal cloaked link</a>  <a href="http://cnn.com">external</a> 

the end result, after replacement should be...

<a href="http://localhost/mytest/">internal</a>  <a href="http://localhost/mytest/go/hostgator" rel="nofollow">internal cloaked link</a>  <a href="http://cnn.com" rel="nofollow">external</a> 

notice first link not altered, since internal link.

the link on second line internal link, since matches our $my_folder string, gets nofollow too.

the third link easiest, since not match blog_url, external link.

however, in script below, of links getting nofollow. how can fix script want?

function save_rseo_nofollow($content) { $my_folder =  $rseo['nofollow_folder']; $blog_url = get_bloginfo('url');     preg_match_all('~<a.*>~isu',$content["post_content"],$matches);     ( $i = 0; $i <= sizeof($matches[0]); $i++){         if ( !preg_match( '~nofollow~is',$matches[0][$i])             && (preg_match('~' . $my_folder . '~', $matches[0][$i])                 || !preg_match( '~'.$blog_url.'~',$matches[0][$i]))){             $result = trim($matches[0][$i],">");             $result .= ' rel="nofollow">';             $content["post_content"] = str_replace($matches[0][$i], $result, $content["post_content"]);         }     }     return $content; } 

try make more readable first, , afterwards make if rules more complex:

function save_rseo_nofollow($content) {     $content["post_content"] =     preg_replace_callback('~<(a\s[^>]+)>~isu', "cb2", $content["post_content"]);     return $content; }  function cb2($match) {      list($original, $tag) = $match;   // regex match groups      $my_folder =  "/hostgator";       // re-add quirky config here     $blog_url = "http://localhost/";      if (strpos($tag, "nofollow")) {         return $original;     }     elseif (strpos($tag, $blog_url) && (!$my_folder || !strpos($tag, $my_folder))) {         return $original;     }     else {         return "<$tag rel='nofollow'>";     } } 

gives following output:

[post_content] =>   <a href="http://localhost/mytest/">internal</a>   <a href="http://localhost/mytest/go/hostgator" rel=nofollow>internal cloaked link</a>       <a href="http://cnn.com" rel=nofollow>external</a> 

the problem in original code might have been $rseo wasn't declared anywhere.


Comments

Popular posts from this blog

apache - Add omitted ? to URLs -

redirect - bbPress Forum - rewrite to wwww.mysite prohibits login -

php - How can I stop spam on my custom forum/blog? -