Vrlo opasan preg je ovo, hvata samo poslednji link u redu....
PHP kôd:
addNoFollow('<a href="http://domen1.com/">domen1</a><a href="http://domen2.com/">domen2</a>') == '<a href='http://domen2.com/' rel='nofollow'>domen2</a>'
Ja sam to kontao rešiti drugojačije, baš razmišljah da uvedem ovako nešto na jedan sajt, pa eto taman da modifikujem malo ovo, i meni će trebati uskoro...
Ovo rešenje traži samo ceo otvarajući A i prvo izbacuje postojeći rel atribut (čak i ako nema navodnike, jer se i to guta), i onda dodaje naš rel="nofollow" na kraj:
PHP kôd:
function addNoFollow($str) {
$search = $replacements = array();
$preg = '/<a([^>]*)>/i';
preg_match_all($preg, $str, $match);
foreach ( $match[0] as $key => $val ) {
if ( !preg_match('/\shref=/i', $val) ) continue;
$search[] = $val;
$r = preg_replace('/\srel=[\"\']?\w+[\"\']?/i', '', $val);
$r = substr($r, 0, -1) . ' rel="nofollow">';
$replacements[] = $r;
}
return str_replace($search, $replacements, $str);
}
Mislim da sam ovim pokrio većinu slučajeva. Testirano sa:
PHP kôd:
print_r(addNoFollow('<a href="http://domen1.com/" rel="something">domen1</a><a href="http://domen2.com/">domen2</a><a href="http://domen3.com/" rel=something>domen3</a>'));