Как получить ссылки не с сайта, используя php и регулярные выражения - PullRequest
1 голос
/ 25 июня 2011

Я хочу добавить rel = "nofollow" во все ссылки на моем сайте, если ссылки ведут на другой сайт.

Например,

$str = "<a href='www.linktoothersite.com'>I swear this isn't spam!</a><br><a href='www.mywebsite.com'>Hello World</a>";

Выход должен быть

$str = "<a href='www.linktoothersite.com' rel="nofollow">I swear this isn't spam!</a><br><a href='www.mywebsite.com'>Hello World</a>";

Я действительно хочу регулярное выражение, но не DDOMDocument. Потому что, когда я использую DOMDocument, я всегда получаю ошибку Предупреждение: DOMDocument :: loadHTML () [domdocument.loadhtml]: htmlParseEntityRef: ожидание ';' в сущности "

1 Ответ

4 голосов
/ 25 июня 2011

Используйте анализатор DOM и переберите все ссылки, проверив их атрибут href для других сайтов. Это не проверено и может потребоваться некоторая настройка.

// assuming your html is in $HTMLstring
$dom = new DOMDocument();
$dom->loadHTML($HTMLstring);

// May need to disable error checking if the HTML isn't fully valid
$dom->strictErrorChecking = FALSE;

// Get all the links
$links = $dom->getElementsByTagName("a");
foreach($links as $link) {
  $href = $link->getAttribute("href");

  // Find out if the link points to a domain other than yours
  // If your internal links are relative, you'll have to do something fancier to check
  // their destinations than this simple strpos()
  if (strpos("yourdomain.example.com", $href) == -1) {
     // Add the attribute
     $link->setAttribute("rel", "nofollow");
  }

// Save the html
$output = $dom->saveHTML;
...