2012-04-18 3 views
0

У меня есть некоторые ссылки, как это:удалить ссылки, где HREF запрещенной

<a href="http://illegallink.com"><img src="something.jpg" /><a href="http://legallink.com">legal</a></a> 

Я хочу, чтобы удалить все ссылки, что делает не имеет «legallink.com» в нем. Но еще сохранить содержание. Таким образом, выведенный выше вывод будет выводиться:

<img src="something.jpg" /><a href="http://legallink.com">legal</a> 

Он должен работать рекурсивно по ссылкам.

Я нашел это регулярное выражение, которое удаляет все ссылки: /<\\/?a(\\s+.*?>|>)/, но я хочу, чтобы он поддерживал ссылки, где href является legallink.com.

Можно ли это сделать с помощью регулярного выражения? Или я должен использовать парсер DOM?

+3

Требуется парсер DOM, особенно для вложенных тегов , как в вашем примере. – Bergi

+0

Может ли кто-нибудь привести пример, как я могу достичь того, чего хочу? Я много смотрел, но не могу найти решение. – Elias

+0

Возможно, здесь: http://stackoverflow.com/questions/4330545/php-html-dom-parser? – bostaf

ответ

1
error_reporting(~0); display_errors(1); 

$code = '<a href="http://illegallink.com"><img src="something.jpg" /><a href="http://legallink.com">legal</a></a>'; 

$document = new DOMDocument(); 
$document->loadHTML($code); 
$parser = new DOMXPath($document); 

foreach($parser->query("//a") as $node) 
{ 
    if (!preg_match("/^http:\/\/legallink.com/i", $node->getAttribute("href"))) 
    { 
    $node->parentNode->replaceChild($node->nodeValue, $node); 
    } 
} 
echo $document->saveXML(); 
+1

@downvoter - Оставьте свой комментарий, пожалуйста. –

+0

Я не путник, но я считаю, что он хочет найти вложенные ссылки, а не ссылки с определенным href. он просто использовал href в качестве примера, чтобы сказать, какая ссылка должна быть сохранена. –

+2

@ JonathanKuhn - Я не должен быть никем из-за неясного вопроса OP. Кроме того, никто не опубликовал альтернативные ответы. –

Смежные вопросы