5 Stimmen

Hilfe mit regex - wie kann ich einige Urls no-follow machen?

Ok, so habe ich diese Funktion, die gut funktioniert für die Umwandlung der meisten Urls wie pies.com oder www.cakes.com zu einem tatsächlichen Link-Tag gemacht.

function render_hyperlinks($str){       
    $regex = '/(http:\/\/)?(www\.)?([a-zA-Z0-9\-_\.]+\.(com|co\.uk|org(\.uk)?|tv|biz|me)(\/[a-zA-Z0-9\-\._\?&=#\+;]+)*)/ie';    
    $str = preg_replace($regex,"'<a href=\"http://www.'.'$3'.'\" target=\"_blank\">'.strtolower('$3').'</a>'", $str);
    return $str;    
}

Ich würde diese Funktion gerne aktualisieren, um Folgendes hinzuzufügen no-follow Tags zu Links zu meinen Konkurrenten,

Ich würde also bestimmte Schlüsselwörter (Namen von Konkurrenten) mit nofollow versehen, z. B. wenn es auf meiner Website um das Backen geht, könnte ich das wollen:

no-follow any sites with the phrases 'bakingbrothers', 'mrkipling', 'lyonscakes'

ist es möglich, dies zu implementieren if(contains x){ add y} in meine Regex?

Ist dies ein so genannter "Rückblick"?

2voto

Narcis Radu Punkte 2491

Vielleicht ist preg_replace_callback das, wonach Sie suchen:

function link($matches)
{
    $str_return = '<a href="http://www.'.$matches[3].'" target="_blank"';
    if(in_array($matches[3], $no_follow_array))
    {
        $str_return .= ' no-follow';
    }
    $str_return .='>'.strtolower($matches[3]).'</a>';
}

$regex = '/(http:\/\/)?(www\.)?([a-zA-Z0-9\-_\.]+\.(com|co\.uk|org(\.uk)?|tv|biz|me)(\/[a-zA-Z0-9\-\._\?&=#\+;]+)*)/ie';    
$str = preg_replace_callback($regex,'link', $str);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X