Как добавить атрибут Rel Nofollow на теге с регулярным выражением

Как добавить атрибут 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>

0

Решение

Использование 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>
2

Другие решения

Шаг 1: Удалить все Rel из тега

$result = preg_replace('@rel="(.*)"@U', '', $html);

Шаг 2: Добавьте Rel Nofollow на таф

$result = preg_replace('@<a(.*)>@U', '<a$1 rel="nofollow">', $result);
1

По вопросам рекламы [email protected]