Получить тело без тегов, используя приборку

http://php.net/manual/en/tidy.body.php вернет содержимое тела, завернутый с <body> тег. Как получить содержание тела без <body> тег? Я придумал пару возможных решений, однако они не очень элегантны.

$tidy = new tidy;
$tidy->parseString($html);
$tidy->cleanRepair();

$body_content=trim(ltrim(rtrim(trim($tidy->body()->value),'</body>'),'<body>'));
var_dump($body_content);

$body=$tidy->body()->value;
$body_content=substr($body,7,strlen($body)-16);
var_dump($body_content);

-1

Решение

$tidy->body() возвращает tidyNode экземпляр, представляющий тело. каждый tidyNode содержит child свойство, содержащее массив tidyNode экземпляры для каждого дочернего элемента. Вы можете перебрать эти дочерние элементы, чтобы перестроить внутренний html тега body. Например:

<?php
$html = <<<'HTML'
<html>
<head><title>test</title></head>
<body>
<h1>Hello!</h1>
<p>Hello world!</p>
</body>
</body>
</html>
HTML;

$tidy = new tidy;
$tidy->parseString($html);
$tidy->cleanRepair();

$bodyInnerHtml = '';
foreach($tidy->body()->child as $child) {
$bodyInnerHtml .= (string)$child;
}
var_dump($bodyInnerHtml);

приведет к:

string(36) "<h1>Hello!</h1>
<p>Hello world!</p>
"

Больше информации о tidyNode класс можно найти в документация.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]