2011-03-14 384 views
0

即時通訊正在播放的PHP和DomDocument ....基本上我有一些HTML保存在分貝。用不同的URL錨標記....我要強制不定位標記的HREF allowedurl名單內有#PHP獲取和設置標籤屬性

被替換例如,從DB1

<table cellspacing="0" cellpadding="0"> 
<tbody> 
    <tr> 
     <td valign="top"> 
      <a href="viewprofile.php?userid=780">Edrine Kasasa </a> has &nbsp; 
     </td> 
     <td valign="top"> 
     invited 10 friend(s) to veepiz using the <a href="invite.php">Invite Tool</a> 
     </td> 
    </tr> 
</tbody> 

$allowed_url_basenames = array('viewprofile.php','viewalbum.php'); 

樣本含量

我想要一個PHP函數,它將保持第一個錨點標記href完好無損,並將第二個更改爲href ='#'。

回答

2

這應該是非常直截了當的。

首先,讓我們抓住所有的錨標籤。 $doc是您創建的文檔with your HTML as the source。現在

$anchors = $doc->getElementsByTagName('a'); 

我們將通過它們一個接一個,並檢查href屬性。讓我們假裝函數contains_bad_url返回true當傳遞的字符串在您的黑名單上。你需要自己寫。

foreach($anchors as $anchor) 
    if($anchor->hasAttribute('href') && contains_bad_url($anchor->getAttribute('href'))) { 
     $anchor->setAttribute('href', '#'); 
    } 
} 

Tada。這應該是全部。你應該能夠get the results back as an XML string,並做任何你需要做的與休息。

1

感謝名單查爾斯....想出了這個

function contains_bad_urls($href,$allowed_urls) 
{ 
    $x=pathinfo($href); 
    $bn=$x['filename']; 
    if (array_search($bn,$allowed_urls)>-1) 
    { 
     return false; 
    } 
    return true; 
} 

function CleanHtmlUrls($str) 
{ 
    $allow_urls = array('viewprofile','viewwall');//change these to whatever filename 
    $doc = new DOMDocument(); 
    $doc->loadHTML($str); 
    $doc->formatOutput = true; 
    $anchors = $doc->getElementsByTagName('a'); 
    foreach($anchors as $anchor) 
    { 
    $anchor->setAttribute('onclick','#'); 
     if(contains_bad_urls($anchor->getAttribute('href'),$allow_urls)) 
     { 
      $anchor->setAttribute('href', '#'); 
     } 
    } 
    $ret=$doc->saveHTML(); 
    return $ret 
}