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);
$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
класс можно найти в документация.
Других решений пока нет …