2013-09-25 108 views
0

我有一個程序,從網絡中刪除某些網頁;然後,我想遍歷剩餘的頁面,並「取消鏈接」到那些已刪除頁面的任何鏈接。我正在使用simplehtmldom。我的函數需要一個源頁面($ source)和一個頁面數組($ skipList)。它找到鏈接,然後我想操縱dom將元素轉換爲$ link-> innertext,但我不知道如何。任何幫助?用純文本替換鏈接用php簡單的html dom

function RemoveSpecificLinks($source, $skipList) { 
    // $source is the html source file; 
    // $skipList is an array of link destinations (hrefs) that we want unlinked 
$docHtml = file_get_contents($source); 
$htmlObj = str_get_html($docHtml); 
$links = $htmlObj->find('a'); 
if (isset($links)) { 
    foreach ($links as $link) { 
     if (in_array($link->href, $skipList)) { 
      $link->href = ''; // Should convert to simple text element 
     } 
    } 
} 
$docHtml = $htmlObj->save(); 
$htmlObj->clear(); 
unset($htmlObj); 
return($docHtml); 
} 

回答

1

我從來沒有使用simplehtmldom,但是這是我認爲應該解決您的問題:

function RemoveSpecificLinks($source, $skipList) { 
    // $source is the HTML source file; 
    // $skipList is an array of link destinations (hrefs) that we want unlinked 
$docHtml = file_get_contents($source); 
$htmlObj = str_get_html($docHtml); 
$links = $htmlObj->find('a'); 
if (isset($links)) { 
    foreach ($links as $link) { 
     if (in_array($link->href, $skipList)) { 

      $link->outertext = $link->plaintext; // THIS SHOULD WORK 

      // IF THIS DOES NOT WORK TRY: 
      // $link->outertext = $link->innertext; 
     } 
    } 
} 
$docHtml = $htmlObj->save(); 
$htmlObj->clear(); 
unset($htmlObj); 
return($docHtml); 
} 

,請給我一些反饋,如果這個工作與否,還指定哪些方法奏效,如果任何。

更新:也許你會喜歡這樣的:

$link->outertext = $link->href; 

這樣你顯示的鏈接,但不能點擊。

+0

謝謝!我使用了innertext,它保留鏈接文本中的任何html格式,但明文,innertext或href都可以工作。 這樣一個明確的解決方案,我踢自己沒有想到它。再次感謝... –

+0

沒問題。很高興我能幫上忙 :-) – George