2011-06-24 5 views
1

リンクが他のウェブサイトにリンクしている場合は、私のウェブサイトのすべてのリンクにrel = "nofollow"を追加します。phpと正規表現を使用してウェブサイトからリンクを取得する方法

例えば、

$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:expecting ';'エンティティ内 "

+0

可能重複http://stackoverflow.com/questions/5608874/how-do-i-programmatically -add-rel-external-to-string-of-htm) – mario

+0

正規表現でhtmlを解析しません。代わりにDOMDocumentを使用してください。 – dqhendricks

答えて

4

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; 
[Iは、プログラムのrel HTMLの文字列の外部リンクに=「外部」を追加するにはどうすればよい?]の(
+0

私はいつも持っています 警告:DOMDocument :: loadHTML()[domdocument.loadhtml]:htmlParseEntityRef:expecting ';'エンティティで、私が$ dom-> loadHTMLを使用しているとき。助言がありますか? –

+0

無効なHTMLを渡しているようですが、どこかの '&amp'のようなエンティティにセミコロンがありません。 HTMLが有効であることを確認するか、 '$ dom-> strictErrorChecking = FALSE'を設定して、より多くの問題を見落とすようにしてください。 –