2016-07-24 31 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實例數組。你可以遍歷這些子元素來重建body標籤的內部html。例如:

<?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); 

將導致:關於tidyNode

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

更多信息可以在documentation找到。

+0

感謝彼得,你的方法更優雅,但也許我會堅持我的黑客,因爲它可能更快。 – user1032531