Как добавить атрибут Rel Nofollow на теге с регулярным выражением
Образец:
<a href="http://www.test.org/5521" rel="follow">test1</a>
<a href="http://www.test.org/5522" rel="external">test1</a>
<a href="http://www.test.org/5523">test1</a>
Для того, чтобы:
<a href="http://www.test.org/5521" rel="nofollow">test1</a>
<a href="http://www.test.org/5522" rel="nofollow">test1</a>
<a href="http://www.test.org/5523" rel="nofollow">test1</a>
Использование DOM-парсера было бы более естественным решением:
$html = <<<STR
<html><body>
<a href="http://www.test.org/5521" rel="follow">test1</a><br/>
<a href="http://www.test.org/5522" rel="external">test1</a><br/>
<a href="http://www.test.org/5523">test1</a>
</body></html>
STR;
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$links = $dom->getElementsByTagName("a");
foreach($links as $link) {
$link->setAttribute('rel', 'nofollow');
}
echo $dom->saveHTML();
Увидеть PHP демо
С $links = $dom->getElementsByTagName("a");
вы получите все a
узлы, и с $link->setAttribute('rel', 'nofollow');
Вы устанавливаете rel
атрибут независимо от того, присутствовал ли он или нет.
Выход:
<html><body>
<a href="http://www.test.org/5521" rel="nofollow">test1</a><br>
<a href="http://www.test.org/5522" rel="nofollow">test1</a><br>
<a href="http://www.test.org/5523" rel="nofollow">test1</a>
</body></html>
Шаг 1: Удалить все Rel из тега
$result = preg_replace('@rel="(.*)"@U', '', $html);
Шаг 2: Добавьте Rel Nofollow на таф
$result = preg_replace('@<a(.*)>@U', '<a$1 rel="nofollow">', $result);