2016-07-24 11 views
-1

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 класса можно найти в documentation.

+0

Спасибо, Питер, ваш подход более изящный, но, возможно, я буду придерживаться своего взлома, поскольку это, вероятно, намного быстрее. – user1032531

 Смежные вопросы

  • Нет связанных вопросов^_^