Intereting Posts
Как получить список всех кешированных элементов по ключу в Laravel 5? получить имя изображения при загрузке MailChimp merge_vars, что еще принимается отдельно от FNAME и LNAME? xampp localhost phpmyadmin Доступ запрещен для пользователя 'root' @ 'localhost' (с использованием пароля: YES) APC – невозможно загрузить динамическую библиотеку PHP Echo Timezone на основе смещения GMT Файл Ajax / Flash загружается с индикатором выполнения? Как загрузить несколько файлов с помощью PHP, jQuery и AJAX Как создать общую базу данных, макет которой может меняться со временем? Можно ли удалить ActionScript из SWF-файла с помощью PHP? Исключение SQLSTATE при подключении к базе данных с помощью 000webhost Как реализовать вложенные комментарии? как я могу написать окно предупреждения javascript, чтобы задать вопрос «да» или «нет» и интегрироваться с вызовами php? получение имени файла без расширения файла в моем php-коде Как анализировать XML-файл в PHP

PHP удаляет ссылки на определенный сайт, но сохраняет текст

Например, <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 удаляет гиперссылку из строки, но я не могу изменить шаблон так что он применяется только к определенному веб-сайту.

Solutions Collecting From Web of "PHP удаляет ссылки на определенный сайт, но сохраняет текст"

 $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 раза медленнее.