Как проставлять аттрибут rel="nofollow" для всех ссылок в описании?(Yii2)
И можно ли добиться такого эффекта штатными методами фреймворка Yii2? В HTMLPurifer, UrlHelper, увы, не нашел нужной опции.
UPD:
Так выглядит getter для вывод указанного момента сейчас. Всвойстве $description хранится HTML-контент, который очищает от потенциального вредоносного кода HTMLPurifier:
public function getDescription()
{
return HtmlPurifier::process($this->description);
}
Ответы (2 шт):
Автор решения: Haku Kimura
→ Ссылка
Для этого вы можете воспользоваться функцией str_replace():
$description = str_replace('a href=', 'a rel="nofollow" href=', $this->description);
return HtmlPurifier::process($description);
либо воспользоваться функцией preg_replace() для замены по регулярному выражению:
$description = preg_replace('/a\s+href="([\w\-.\/:]+)"/iu', 'a href="$1" rel="nofollow"', $this->description);
return HtmlPurifier::process($description);
но первый вариант будет работать быстрее.
Автор решения: Starik
→ Ссылка
Этого можно добиться через штатный конфиг HtmlPurifier так:
public function getDescription()
{
return HtmlPurifier::process($this->description, function (\HTMLPurifier_Config $config) {
$config->set('HTML.Nofollow', true);
});
}
или так:
public function getDescription()
{
$config = \HTMLPurifier_Config::createDefault();
$config->set('HTML.Nofollow', true);
return HtmlPurifier::process($this->description, $config);
}
Как вам больше нравится оформление кода.
Тут можно найти описание этого и других параметров конфигурации HtmlPurifier.
