У меня вопрос о разборе текста и удалении нежелательных частей 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://www.zendcasts.com/writing-custom-zend-filters-with-htmlpurifier/2011/06/
это для Zend Framework, но я думаю, что это может помочь