im, играемый php и DomDocument …. в основном у меня есть некоторый html, сохраненный в db. С привязными тегами с разными URL-адресами …. Я хочу, чтобы привязать метки привязки, не в списке allowedurl, который должен быть заменен на #
например
$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 </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 = '#'.
Это должно быть довольно прямолинейно.
Во-первых, давайте хватаем все теги привязки. $doc
– это документ, который вы создали с вашим HTML в качестве источника .
$anchors = $doc->getElementsByTagName('a');
Теперь мы пройдем через них один за другим и href
атрибут href
. Давайте притворимся, что функция contains_bad_url
возвращает true
когда переданная строка находится в вашем черном списке. Вам нужно будет написать это самостоятельно.
foreach($anchors as $anchor) if($anchor->hasAttribute('href') && contains_bad_url($anchor->getAttribute('href'))) { $anchor->setAttribute('href', '#'); } }
Тад. Это должно быть все, что нужно. Вы должны иметь возможность вернуть результаты в виде строки XML и делать все, что вам нужно делать с остальными.
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 }