Comment ajouter rel = "nofollow" aux liens avec preg_replace ()

La fonction ci-dessous est conçu pour s'appliquer attributs pour tous les liens externes et pas de liens internes, à moins que le chemin d'accès correspond à une valeur de la racine de l'URL définie comme $my_folder ci-dessous.

Les variables...

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

Et le contenu...

<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>

Le résultat final, après le remplacement doit être...

<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>

Avis que le premier lien n'est pas altérée, depuis sa un lien interne.

Le lien sur la deuxième ligne est également un lien interne, mais depuis qu'il correspond à notre $my_folder chaîne, il obtient le nofollow trop.

Le troisième lien est le plus facile, car il ne correspond pas à la blog_urlson évidence d'un lien externe.

Toutefois, dans le script ci-dessous, TOUS mes liens sont arriver nofollow. Comment puis-je corriger le script pour faire ce que je veux?

function save_rseo_nofollow($content) {
$my_folder =  $rseo['nofollow_folder'];
$blog_url = get_bloginfo('url');
    preg_match_all('~<a.*>~isU',$content["post_content"],$matches);
    for ( $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 .= ' >';
            $content["post_content"] = str_replace($matches[0][$i], $result, $content["post_content"]);
        }
    }
    return $content;
}

source d'informationauteur Scott B