Получить текст с PHP Simple HTML DOM Parser

Я использую PHP Simple HTML DOM Parser для получения текста с веб-страницы. Страница, которой мне нужно манипулировать, выглядит примерно так:

<html>
<head>
<title>title</title>
<body>
<div id="content">
<h1>HELLO</h1>
Hello, world!
</div>
</body>
</html>

Мне нужно получить элемент h1 и текст без тегов. чтобы получить h1, я использую этот код:

$html = file_get_html("remote_page.html");
foreach($html->find('#content') as $text){
echo "H1: ".$text->find('h1', 0)->plaintext;
}

А другой текст? Я также пробовал это в foreach, но я получаю полный текст:

$text->plaintext;

но он также вернул тег H1...


person Christian Giupponi    schedule 24.03.2012    source источник
comment
Почему вы ожидаете, что элемент plaintext вернет что-то еще?   -  person hakre    schedule 24.03.2012
comment
мне нужно только "Hello, World!" часть, можно?   -  person Christian Giupponi    schedule 24.03.2012
comment
Думаю, да, но я не могу рекомендовать Simple HTML DOM Parser, а просто DOMDocument. Тогда было бы ->nodeValue.   -  person hakre    schedule 24.03.2012
comment
У меня та же проблема, я хочу извлечь текст после тега, который не находится внутри тегов...   -  person David    schedule 07.04.2014


Ответы (4)


Похоже, что $text->find('text',2); получает то, что вы ищете, однако я не уверен, насколько хорошо это будет работать, когда количество текстовых узлов неизвестно. Я буду искать.

person Korvin Szanto    schedule 24.03.2012

Вы можете просто удалить HTML-теги, используя strip_tags.

<?php
strip_tags($input, '<br>');
?>
person Peachy    schedule 14.12.2016
comment
Почему вы исключили тег <br>? ОП сказал, что все теги нужно удалить. - person NonCreature0714; 14.12.2016
comment
вы можете оставить это поле пустым. - person Peachy; 14.12.2016

Используйте теги полосы, как указал @Peachy. Однако передача второго аргумента <br> означает, что строка будет игнорировать <br> тегов, что необязательно. В твоем случае,

<?php
    strip_tags($text);
?>

будет работать так, как вам хотелось бы, учитывая, что вы выбираете контент только в идентификаторе content.

person NonCreature0714    schedule 14.12.2016

Попробуй

echo "H1: ".$text->find('h1', 0)->innertext;
person Malleron    schedule 24.06.2021