Мне нужна функция, которая исправляет ВСЕ исходящие ссылки в заданном HTML-тексте и добавляет к ссылке атрибут «rel = nofollow». Исправлять нужно только исходящие ссылки.
Пример: мой домен www.laptops.com
$myDomain = "www.laptops.com";
$html =
"Hello World have a look at <a href = "www.laptops.com/apple">Apple Laptops</a>.
For more ino go to <a href = "www.apple.com">Apple.com</a>
or to <a href = "www.appleblog.com">Appleblog.com</a>";
function correct($html,$myDomain){
//get all links by filtering '<a ... href = "{$link}" .....>' and
//check with isOutgoing($href,$myDomain )
}
$newHTML = correct($html,$myDomain);
echo $newHTML;
//Hello World have a look at <a href = "www.laptops.com/apple">Apple Laptops</a>.
//For more ino go to <a rel = "nofollow" href = "www.apple.com">Apple.com</a>
//or to <a rel = "nofollow" href = "www.appleblog.com">Appleblog.com</a>
Пока у меня есть функция isOutgoing ($ link), которая может определять, является ли ссылка исходящей или нет, но обнаружение ВСЕХ "<a ... href =" {$ link} "..... > "части HTML-текста и фильтрация {$ link} создает проблемы. Я знаю, что это должно быть возможно с preg_match (), но я не знаю, как это решить.
это должен быть PHP? В jQuery это безумно просто






Вам следует избегать использования регулярных выражений, вместо этого вы должны использовать DOMDocument и DOMXPath.
<?php
$dom = new DOMDocument();
$dom->loadHtml('
Hello World have a look at <a href = "www.laptops.com/apple">Apple Laptops</a>.
For more ino go to <a href = "www.apple.com">Apple.com</a>
or to <a href = "www.appleblog.com">Appleblog.com</a>
', LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($dom);
foreach ($xpath->query("//a") as $link) {
$href = $link->getAttribute('href');
// link does not have a www.laptops.com in it, add rel attribute
if (strpos($href, 'www.laptops.com') === false) {
$link->setAttribute("rel", "nofollow noopener");
}
}
echo $dom->saveHTML();
Результат:
<p>Hello World have a look at <a href = "www.laptops.com/apple">Apple Laptops</a>.
For more ino go to <a href = "www.apple.com" rel = "nofollow noopener">Apple.com</a>
or to <a href = "www.appleblog.com" rel = "nofollow noopener">Appleblog.com</a>
</p>
Этот. Если он ДОЛЖЕН быть на PHP! ДОМ-классы - это круто!
Спасибо, у меня сработало. Необходимо добавить код для UTF-8 и подавления ошибок: $ sHTML = mb_convert_encoding ($ sRawValue, 'HTML-ENTITIES', 'UTF-8'); $ libxml_previous_state = libxml_use_internal_errors (истина); $ oDom-> loadHtml ($ sHTML, LIBXML_HTML_NODEFDTD | LIBXML_NOERROR | LIBXML_NOWARNING); // обрабатываем ошибки libxml_clear_errors (); // восстанавливаем libxml_use_internal_errors ($ libxml_previous_state);
Это было бы намного проще с небольшим количеством jQuery.
<script type = "text/javascript">
$(document).ready(function(){
$('a').each(function(){
let href = $(this).prop('href');
if (!href.search('laptops.com')) {
$(this).prop('rel', 'nofollow');
}
});
});
</script>