Как удалить html часть текста в PHP

У меня вопрос о разборе текста и удалении нежелательных частей html. Я знаю такие функции, как strip_tags (), которые удаляют все теги, но проблема в том, что эта функция оставляет там «внутренний текст».

Позвольте мне показать вам пример, у нас есть текст:

Hello, how are you? <a href="">Link to my website</a> __Here continues html tags, links, images__ 

Я хочу удалить всю часть, где находится html. Не только теги, но и текст (например, «Ссылка на мой сайт» выше).

Есть ли эффективный способ, который я пропустил?

Попробуй это:

 function removeTags($str) { $result = ''; $xpath = new DOMXPath(DOMDocument::loadHTML(sprintf('<body>%s</body>', $str))); foreach ($xpath->query('//body/text()') as $textNode) { $result .= $textNode->nodeValue; } return $result; } echo removeTags( 'Hello, how are you? <a href="">Link to my website</a> __Here continues html <span>tags</span>, links, images__' ); 

Вывод:

 Hello, how are you? __Here continues html , links, images__ 

Почему бы не сделать правило, чтобы входной сигнал субтитров не позволял содержать теги.

 function containsIllegalHtml($input, $allowable_tags = '') { if($input != strip_tags($input, $allowable_tags)) { return true; } else { return false; } } 

Используйте эту функцию, чтобы проверить, содержат ли теги теги или нет.

вы можете написать функцию, которая берет строку, и использует функции php string для получения позиции «<», а затем позицию «>» и отрисовки их из входной строки

возможно, это не правильно, но …

 $str = 'Hello, how are you? <a href="">Link to my website</a> __Here continues html tags, links, '; $rez = preg_replace("/\<.*\>/i",'',$str); var_dump($rez); 

дал мне результат

 string 'Hello, how are you? __Here continues html tags, links, ' (length=56) 

я искал и нашел это решение

 $txt = " <html> <head><title>Something wicked this way comes</title></head> <body> This is the interesting stuff I want to extract </body> </html>"; $text = preg_replace("/<([^<>]*)>/", "", $txt); echo htmlentities($text); 

Некоторые прег магии?

 $text = preg_replace('/<[\/\!]*?[^<>]*?>/si', '', $text); 

Возможно, это сработает:

http://htmlpurifier.org/

Вот учебник

http://www.zendcasts.com/writing-custom-zend-filters-with-htmlpurifier/2011/06/

это для Zend Framework, но я думаю, что это может помочь