PHP获取和设置标记属性

时间:2011-03-14 04:19:26

标签: php dom

我正在玩php和DomDocument ....基本上我在db中保存了一些html。使用不同网址的锚标记....我想强制不在allowedurl列表中的锚标记hrefs替换为#

例如

$allowed_url_basenames = array('viewprofile.php','viewalbum.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>

我想要一个php函数,它将保留第一个锚标记href并将第二个更改为href ='#'。

2 个答案:

答案 0 :(得分: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', '#');
    }
}

多田。应该就是它的全部内容。你应该能够get the results back as an XML string并做任何你需要做的事情。

答案 1 :(得分:1)

Thanx Charles ....想出了这个

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
}