0

我有一个程序可以从网络中删除某些页面;然后我想遍历剩余的页面并“取消链接”到那些已删除页面的任何链接。我正在使用 simplehtmldom。我的函数需要一个源页面 ($source) 和一个页面数组 ($skipList)。它找到链接,然后我想操纵 dom 将元素转换为 $link->innertext,但我不知道如何。有什么帮助吗?

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);
}
4

1 回答 1

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;

这样您就可以显示链接,但不能点击。

于 2013-09-25T00:47:22.973 回答