2013-03-27 17 views
0

我想使用整潔的插件,但只適用於一個字符串。我使用的代碼是:解析有效的html(php - tidy)

tidy_repair_string($string); 

我的問題是,這個腳本是在一個文件中我只是使用需要一次包括他。

但整齊重複的HTML,身體,標題標籤(文件的一般標籤)。

如何才能驗證我的字符串沒有返回HTML等,等等?

例子:如果我的字符串是<b><s>Text</b>我要整潔只返回<b><s>Text</s></b>

NOT:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> 
<html> 
<head> 
<title></title> 
</head> 
<body> 
<b><s>Text</s></b> 
</body> 
</html> 

謝謝!

回答

0

正如你在你的問題已經提到的,整潔運行在一個完整的HTML文檔,所以修復的一個包含(如果配置)一個文檔類型,但總是頭部分。

您正在尋找一個HTML片段,它不是一個完整的HTML文檔。

這種差異化已經包含解決方案:將HTML片段注入爲正文,將其作爲文檔修復,然後僅以字符串形式獲取正文的子體。完成。這是一個很短,但已經開始着手例如:

/* Tidy example: Clean a HTML fragment */ 

$fragment = '<b><s>Text</b>'; 

$tidy = new Tidy; 
$tidy->parseString($fragment); 
$tidy->cleanRepair(); 

$result = implode('', (array) $tidy->body()->child); // <b><s>Text</s></b> 

如果你想走得更遠一步,驗證HTML片段(例如只有有效的HTML代碼和所有標籤關閉,看還有tidy configuration),您可以前綴它只有最低限度的HTML,因此錯誤和警告屬於片段本身的責任。可以通過tidy::getStatus()然後獲得的狀態:

/* Tidy example: Validate a HTML fragment (4 samples) */ 

$fragments = [ 
    ['Valid fragment', '<b><s>Text</s></b>'], 
    ['Unclosed tag', '<b><s>Text</b>'], 
    ['Unknown tag', '<unknown></unknown>'], 
    ['Unfinished attribute', '<a href=">link</a>'], 
]; 

$tidy = new Tidy; 

foreach ($fragments as list($title, $fragment)) { 
    $tidy->parseString("<!DOCTYPE html><title>HTML fragment</title><body>" . $fragment); 
    $status = $tidy->getStatus(); 
    $tidy->cleanRepair(); 
    $result = implode('', (array)$tidy->body()->child); 
    printf("%s - Status: %d\n HTML: %s\n Repaired: %s\n", $title, $status, $fragment, $result); 
} 

這個例子將提供以下輸出展示的getType在默認配置返回值的含義:

Valid fragment - Status: 0 
    HTML: <b><s>Text</s></b> 
    Repaired: <b><s>Text</s></b> 
Unclosed tag - Status: 1 
    HTML: <b><s>Text</b> 
    Repaired: <b><s>Text</s></b> 
Unknown tag - Status: 2 
    HTML: <unknown></unknown> 
    Repaired: 
Unfinished attribute - Status: 2 
    HTML: <a href=">link</a> 
    Repaired: <a href="%3Elink%3C/a%3E"></a> 

這比你所要求,我只是把它作爲一個額外的例子加入,例如查看字符串中的所有標籤是否關閉。

+0

剛剛看到[我的以前的答案,有一個'show-body-only'選項與Tidy](http://stackoverflow.com/a/6851708/367456)。 – hakre 2014-05-05 05:08:33