PHP Получение и настройка атрибутов тега - PullRequest
0 голосов
/ 14 марта 2011

я играю php и DomDocument .... в основном у меня есть некоторые HTML, сохраненные в БД. С тегами привязки с разными URL-адресами .... я хочу принудительно заменить ссылки привязки тега, не входящие в список позволенных, на #

например

$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 ]

2 голосов
/ 14 марта 2011

Это должно быть довольно просто.

Сначала давайте возьмем все якорные теги.$doc - это документ, который вы создали с вашим HTML в качестве источника .

$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', '#');
    }
}

Тада.Это должно быть все, что нужно сделать.Вы должны иметь возможность получить результаты обратно в виде XML-строки и делать с остальными все, что вам нужно.

1 голос
/ 15 марта 2011

Спасибо Чарльзу .... придумали это

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
}   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...