Например, <a href="http://msdn.microsoft.com/art029nr/">remove links to here but keep text</a> but <a href="http://herpyderp.com">leave all other links alone</a>
Я пытался решить это, используя preg_replace. Я искал здесь и нашел ответы, которые решают часть проблемы.
Ответ на PHP: удалить все гиперссылки определенного домена из текста, удаляет ссылки на определенный URL-адрес, но также удаляет текст.
Сайт в http://php-opensource-help.blogspot.ie/2010/10/how-to-remove-hyperlink-from-string.html удаляет гиперссылку из строки, но я не могу изменить шаблон так что он применяется только к определенному веб-сайту.
$html = '...I can haz HTML?...'; $whitelist = array('herpyderp.com', 'google.com'); $dom = new DomDocument(); $dom->loadHtml($html); $links = $dom->getELementsByTagName('a'); foreach($links as $link){ $host = parse_url($link->getAttribute('href'), PHP_URL_HOST); if($host && !in_array($host, $whitelist)){ // create a text node with the contents of the blacklisted link $text = new DomText($link->nodeValue); // insert it before the link $link->parentNode->insertBefore($text, $link); // and remove the link $link->parentNode->removeChild($link); } } // remove wrapping tags added by the parser $dom->removeChild($dom->firstChild); $dom->replaceChild($dom->firstChild->firstChild->firstChild, $dom->firstChild); $html = $dom->saveHtml();
Для тех, кто боится использовать DomDocument вместо preg_replace
по соображениям производительности, я быстро preg_replace
это и код, связанный с Q (тот, который полностью удаляет ссылки) => DomDocument работает только в 4 раза медленнее.