Эта функция добавляет атрибуты rel="nofollow" и target="_blank" ко всем внешним ссылкам за исключением некоторых хостов.
public static function nofollow($html) {
$host = Sysinfo::host();
$exclude = self::$exclude;
if (!in_array($host, $exclude)) array_push($exclude, $host);
array_walk($exclude, function(& $v, $k) {
$v = preg_quote('//' . $v, '/');
});
$exclude = join('|', $exclude);
return preg_replace_callback('/<a[^>]+/', function($matches) use ($exclude) {
$link = $matches[0];
if (strpos($link, self::FOLLOW) !== false) {
return str_replace(self::FOLLOW, '', $link);
}
if (preg_match('/(href=\\S(?!' . $exclude . '))/i', $link)) {
$link = rtrim(preg_replace('/(target=[\'"].*?[\'"]|rel=[\'"].*?[\'"])/', '', $link))
. ' rel="nofollow" target="_blank"';
}
return $link;
}, $html);
}
Sysinfo::host() возвращает имя хоста, где установлена система.
self::exclude может содержать дополнительные имена хостов для добавления в исключения.
protected static $exclude = array(
'c1.aplab.ru',
'aplab.ru'
);
Если ссылка содержит значение self::FOLLOW, то такая ссылка исключается из проверки и остается как есть.
Сам флаг self::FOLLOW удаляется из тега ссылки и заменяется пустой строкой.